gpt4 book ai didi

连接问题后的 SQL 不同选择行

转载 作者:行者123 更新时间:2023-12-04 13:05:05 24 4
gpt4 key购买 nike

假设我有 2 个表 Customer 和 Books。

Table Books 可以包含与 Customer 中的一行相关的多行。

例如:客户 John Doe 的 ID 为 1000。Table Books 有 2 行,其中 member_id 列为 1000 (John Doe)。

除了其中一个字段(书名)为空外,这两行完全相同。另一行具有标题值。

问题:我如何查询它以便检索具有有效标题值的行,但是,如果两个标题值都为空,那么它只返回一行?

我当然希望这是有道理的。

最佳答案

您应该能够使用不同的运算符:

SELECT DISTINCT Customers.member_id, Books.book_title
FROM Customers
INNER JOIN Books ON Customers.member_id = Books.member_id

如果这不能正常工作,您可以使用内部选择:

SELECT DISTINCT *
FROM (SELECT Customers.member_id, Books.book_title
FROM Customers
INNER JOIN Books ON Customers.member_id = Books.member_id) As newTable

此外,如果这是一个经常使用的查询,我会避免使用 UNION,因为众所周知它们存在性能问题。

对编辑的回应:

SELECT Customers.member_id, Customer_Info.Name, ISNULL(newTable.book_title, '')
FROM Customers
INNER JOIN Customer_Info
LEFT JOIN (SELECT DISTINCT member_id, book_title FROM Books) newTable
ON newTable.member_ID = Customers.member_id

这应该返回与客户相关的所有书籍(但每个书名只返回一次,如果没有找到书籍,那么它将返回一个空字符串。)如果这不能回答问题,请包括一些关于表格的附加信息以及您想要的结果示例,我会更新。

好的,现在我想我知道你在找什么了:

这是一个可能的查询,基于您的原始问题,使用提供的表格。但是,如果客户设置了两个不同的电子邮件地址,它将不起作用;在这种情况下,您可以添加一个 TOP(1) 以确保只有一个结果,但您不知道它是否是“正确的结果”。

SELECT Customers.member_id, Office.Office_Name, ISNULL(newTable.email, '')
FROM Customers
INNER JOIN Office
LEFT JOIN (SELECT DISTINCT member_id, email
FROM Books
WHERE email IS NOT NULL AND email <> '') newTable
ON newTable.member_ID = Customers.member_id

这是另一个基于您提供的数据和示例输出的查询。

SELECT Member_Name, Email
FROM thridTable
WHERE Member_Name = @SomeInputParameter

我不确定您的示例数据的代表性如何,但您为什么要将成员名称存储在多个表中?这肯定是 future 令人头疼的问题。

关于连接问题后的 SQL 不同选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1291134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com