【问题标题】:SQL Query Using AND OR使用 AND OR 的 SQL 查询
【发布时间】:2016-12-03 05:26:15
【问题描述】:

我有两个表:Customers 和 Orders。

我需要知道在给定月份中哪些客户订购了“面包”和(牛奶或冰淇淋)。

我应该如何编写 SQL 查询?

谢谢。

【问题讨论】:

  • 查看 w3schools.com/Sql/sql_and_or.asp 上的“组合 AND & OR”,了解 Google 的快速创意。
  • 你至少需要共享表结构。并分享您到目前为止所尝试的内容。这就是 SO 的工作原理。
  • "Bread" AND (Milk or Ice Cream) 逻辑上你会这样写
  • 请阅读How to Ask

标签: sql sql-server


【解决方案1】:

正如其他人在 cmets 中所说,您应该真正尝试改进您的问题,以便人们更愿意回答和帮助您。

设置一些测试数据(对您的架构做出假设):

CREATE TABLE Customers (
    CustomerID INT,
    CustomerName VARCHAR(50)
)

CREATE TABLE Orders (
    OrderId INT,
    OrderDate DATETIME,
    CustomerID INT,
    Product VARCHAR(50)
)

INSERT INTO Customers
SELECT 1, 'John Smith'
UNION
SELECT 2, 'Jane Doe'
UNION
SELECT 3, 'Rachel Booth'
UNION
SELECT 4, 'Steve Barnes'
UNION
SELECT 5, 'Nancy Green'
UNION
SELECT 6, 'Phil Jones'

INSERT INTO Orders
SELECT 1, '2016-09-01', 1, 'Bread'
UNION
SELECT 2, '2016-09-10', 3, 'Milk'
UNION
SELECT 3, '2016-09-19', 1, 'Milk'
UNION
SELECT 4, '2016-10-07', 4, 'Bread'
UNION
SELECT 5, '2016-10-13', 2, 'Milk'
UNION
SELECT 6, '2016-10-15', 4, 'Milk'
UNION
SELECT 7, '2016-10-19', 6, 'Milk'
UNION
SELECT 8, '2016-10-21', 6, 'Ice Cream'
UNION
SELECT 9, '2016-10-27', 1, 'Milk'
UNION
SELECT 10, '2016-10-28', 4, 'Milk'
UNION
SELECT 11, '2016-11-06', 5, 'Ice Cream'
UNION
SELECT 12, '2016-11-09', 5, 'Bread'

并设置要检查的月份:

DECLARE @Month DATETIME
SET @Month = '2016-09-01'

我会得到一个符合您逻辑的客户列表,如下所示:

SELECT DISTINCT c.CustomerName
FROM Customers c
JOIN Orders ob ON ob.CustomerID = c.CustomerID
JOIN Orders omi ON omi.CustomerID = c.CustomerID
WHERE ob.Product = 'Bread'
AND omi.Product IN ('Milk','Ice Cream')
AND DATEADD(month, DATEDIFF(month, 0, ob.OrderDate), 0) = DATEADD(month, DATEDIFF(month, 0, omi.OrderDate), 0)
AND DATEADD(month, DATEDIFF(month, 0, ob.OrderDate), 0) = @Month

【讨论】:

    猜你喜欢
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多