【问题标题】:returning SQL results where bit value = 1返回位值 = 1 的 SQL 结果
【发布时间】:2018-03-27 04:52:12
【问题描述】:

我有一个包含 3 个表的数据库(见截图)

我需要退回允许营销的客户。

我可以使用 where 子句返回客户标题,但我不确定如何过滤允许营销的客户。我已经查看了 where 和 join 子句,但我可能遗漏了什么?

任何帮助将不胜感激。

【问题讨论】:

    标签: mysql sql sql-server rdbms


    【解决方案1】:

    看起来应该是这样的:

    SELECT c.Forename, c.Surname, c.Email, t.Description, s.IsMarketingAllowed
    FROM Customer c
    INNER JOIN Statuses s ON c.StatusID = s.StatusID
    INNER JOIN Titles t ON c.Title = t.TitleID
    WHERE s.IsMarketingAllowed = 1 
    

    【讨论】:

    • 感谢您的评论,我想我可能错过了原始问题中的一些信息。目前我有以下声明:code select Forename, Surname, Email from Titles, Customers, Statuses where Customers.Title = Titles.TitleID;这就是我需要修改的内容,以便在有意义的情况下返回允许营销的客户?
    • 你应该明确地使用 write JOINS 而不是用逗号列出你的表。你试过运行上面的查询吗?
    • 我运行了您评论的查询,但就像我在回复中所说的那样,这不是我需要的,因为我错过了一些关于我已经拥有的信息。另外,明确写 JOINS 是什么意思?
    • 好的,现在试试...我把你想要的列。基本上,列出表并使用 WHERE 子句并不是最佳做法。建议改为使用 JOIN 语法加入它们......然后 ON 指定应该链接表的 ID
    • 非常感谢!我将如何将我当前的查询与该查询合并?我需要通过执行以下操作从 Titles 表中返回 titleDescription:code 选择 Description Forename, Surname, Email from Titles, Customers where Customers.Title = Titles.TitleID; code
    【解决方案2】:
    SELECT Title
    FROM   Customer AS Cust
    WHERE EXISTS (SELECT * 
                  FROM Statuses AS S 
                  WHERE S.statusID = Cust.statusID 
                  AND S.isMarketingAllowed = 1);
    

    请注意: 虽然通过 JOIN 操作可以获得相同的结果、相似的性能,但我认为它的可读性较差。当您需要从第二个表中访问数据(通过 select 子句)时,应使用 JOIN 操作。

    【讨论】:

    • 感谢您的回复!我在下面的评论中添加了一条评论,我可能在最初的问题中遗漏了这条评论。
    猜你喜欢
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多