表A包含列ID和AName,表B包含列BName和ID。
B.ID是A.ID的外键。
编写一个SQL语句来显示如下数据: 打印列AName和C,描述表B中是否具有表A中的ID,如果存在1或者否则为0。
所以如果A是:
1 aaa
2 bbb
B是:
something,2
输出是:
aaa,0
bbb,1
答案 0 :(得分:4)
以下内容适用于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
条件;在您的示例中,对于表A中具有ID 2的行,B.ID
的值将为2.对于表1中具有ID 1的行,C B.ID
值将为NULL
。为了将这些值分别转换为1或0,我们使用CASE
语句并检查该值是否为null,并根据此表达式的求值返回适当的值。
答案 1 :(得分:2)
答案 2 :(得分:2)
您可能希望使用子查询而不是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 |
+-------+--------+