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 伪查询的主要内容,如果未能解决你的问题,请参考以下文章

单个 SQL 选择查询与单个大 SQLselect 查询:啥更好?为啥? [关闭]

sql如何根据一个字段的多个值查询

sql server查询分区表

一个 SQL 查询,还是一个循环中的多个?

在 SQL Server 上查询存储过程的内容

MySQL使用伪列