表A具有列ID和AName,表B具有列BName和ID。有關複雜SQL語句的問題
B.ID是A.ID的外鍵。
寫SQL語句來顯示像數據: 打印柱AName和C,其描述表B是否具有表A的ID,如果存在1或否則爲0。
所以,如果A爲:
1 aaa
2 bbb
B爲:
something,2
輸出是:
aaa,0
bbb,1
表A具有列ID和AName,表B具有列BName和ID。有關複雜SQL語句的問題
B.ID是A.ID的外鍵。
寫SQL語句來顯示像數據: 打印柱AName和C,其描述表B是否具有表A的ID,如果存在1或否則爲0。
所以,如果A爲:
1 aaa
2 bbb
B爲:
something,2
輸出是:
aaa,0
bbb,1
類似以下內容將用於SQL Server工作
SELECT
A.AName,
CASE
WHEN B.ID IS NOT NULL THEN 1
ELSE 0
END AS C
FROM
TableA A
LEFT JOIN
TableB B
ON
A.ID = B.ID
見LEFT JOIN
?這將返回包含來自表A的所有行的結果集,並且將包括來自表B的值,其中表B派生字段在SELECT
子句中使用並且由JOIN
條件滿足;在你的例子中,B.ID
的值爲2,表A中ID爲2的行。相應地,B.ID
的值爲NULL
,表A中ID爲1的行。爲了將這些值分別轉換爲1或0然後,我們使用CASE
語句並檢查該值是否爲null,並根據對此表達式的評估返回適當的值。
在某些DBMS中,第二個值可以更簡單地寫爲ISNULL(B.ID)AS C'。 – 2010-03-20 14:27:31
ISNULL將返回B.ID(如果存在)的值而不是1,這是問題的要求。 – 2010-03-20 14:36:38
您可能需要使用子查詢,而不是一個LEFT JOIN
:
測試數據(使用MySQL):
CREATE TABLE a (id int, aname varchar(100));
CREATE TABLE b (bname varchar(100), id int);
INSERT INTO a VALUES ('1', 'aaa');
INSERT INTO a VALUES ('2', 'bbb');
INSERT INTO b VALUES ('something', '2');
查詢:
SELECT
a.aname,
CASE EXISTS(SELECT b.id FROM b WHERE b.id = a.id)
WHEN 1 THEN '1'
ELSE '0'
END AS output
FROM a;
輸出:
+-------+--------+
| aname | output |
+-------+--------+
| aaa | 0 |
| bbb | 1 |
+-------+--------+
看起來像可能的功課問題。 – 2010-03-20 14:23:15
複雜嗎?這是數據庫101,在現實生活中,你幾乎不會寫這樣簡單的查詢。 – HLGEM 2010-03-20 14:38:15