SQL 伪查询
Posted
技术标签:
【中文标题】SQL 伪查询【英文标题】:SQL pseudo query 【发布时间】:2017-06-01 20:42:44 【问题描述】:三个数据表A、B和C。 A 和 B 共享一个公共变量 ID1。 B 和 C 共享一个公共变量 ID2。 编写一个伪查询来得到这个结果:从表 B 中选择所有内容,在表 A 和 B 中都有匹配的记录,但在表 C 中没有。
我是 sql 新手,非常感谢您的帮助
【问题讨论】:
问一个具体的问题。不要只是把你的家庭作业丢在这里,然后指望我们去做。 什么是伪查询?听起来你真的需要写一个JOIN
。
查看***.com/questions/21633115/…了解如何选择与表C不匹配的记录。
【参考方案1】:
我们无法为您完成作业,但这里有一些学习方向:表 A 和表 B 将通过 ID1 列上的基本内部连接进行连接。
比较棘手的部分是排除 A 和 B 的结果(如果它们存在于表 C 中)。为此,您可以进行外连接,并添加 where 子句以查找表 C 的空值。这是因为当您执行外连接(对于本例,我们将使用 left 外连接),它将从左表中提取所有适当的记录,然后 try 提取匹配右表中的记录。但是如果该记录不存在于正确的表中,那么它将返回一个值为“null”的记录。
您的查询将是:
SELECT
table_b.* -- "select all from table B"
FROM
table_a INNER JOIN table_b ON (table_a.ID1 = table_b.ID1) -- "matching records in A and B"
LEFT OUTER JOIN table_c ON (table_b.ID2 = table_c.ID2) -- Bring in table C to let us check if B's rows exist in C
WHERE
table_c.ID2 IS NULL -- Only display records that don't have a corresponding C record
“选择 B 而不是 C 中的记录”的关键是理解外连接。
【讨论】:
以上是关于SQL 伪查询的主要内容,如果未能解决你的问题,请参考以下文章