表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