2009年6月21日日曜日

SQL文で失敗

こんなテーブルがあったとして、(下線は主キー)
TBL_A(ID,NAME,ADDRESS),TBL_B(ID,START_DATE,JOB)

各人の名前と直近の仕事名を記述するSQL文で、プログラム仕様書では以下のように書いてしまいました。

SELECT
A.NAME, B.JOB_NAME
FROM
TAB_A AS A JOIN (SELECT TOP(1) JOB AS JOB_NAME ,ID FROM TAB_B AS BB
WHERE A.ID=BB.ID ORDER BY START_DATE DESC) AS B
ON
A.ID=B.ID

で、プログラマから、できませんよ。という冷たいお言葉。
JOIN句で、同列に配置したテーブルと副問い合わせでは、副問い合わせの中で、利用できないみたい(斜体の部分がバインドできないエラー)。副問い合わせの中でTOP 1 で絞り込んでいるので、副問い合わせの中で条件を入れないといけないのだが、さて困った。

追記:
そうそう、以下のように書けば言いなんていわないでね。TAB_Bで今回引っ張ってきたJOBをキーに別の2テーブルから合計4列抽出するSQLをデフォルメして説明しているのだからね。
SELECT
A.NAME,A.AGE,
(SELECT TOP 1 JOB FROM TAB_B AS B WHERE A.ID=B.ID ORDER BY START_DATE DESC)
FROM TAB_A AS A

0 件のコメント: