我需要满足多个条件的列。在下面的查询中,我有A.Col3 IN ('1', '2', '3')
,这将匹配Col3
中我任何这些值的记录。我希望结果可以匹配所有这些值:我在哪里可以找到匹配'1','2',和'3'的联接的表A记录。
SELECT A.Col1, B.LoginID, A.Col3
FROM
TableA A,
TableB B
WHERE A.Col4 = '2015'
AND A.Col5 = '12'
AND A.Col3 IN
('1','2','3')
AND A.Col6 IN
( SELECT col7
FROM TableB
WHERE Col8 = ' ')
AND A.Col6 = B.col9
AND B.LoginID IS NOT NULL
GROUP BY Col6
HAVING COUNT(*) = 2
;
我试图看到A.col3有3种类型的值 - 表格中的1 2和3 [对于A.Col1]
答案 0 :(得分:0)
问题是遗漏了一些信息,所以我只能解释一下如何解决这个问题。我们假设您有三个表:Orders
,OrderLines
和Products
。 Orders
表包含ID
(自动增量/主键)的字段,以及在此处不重要的数据。 OrderLines
表格包含OrderID
,ProductID
以及Price
和Qty
字段,这些字段也不会在这里使用。
如果我正确理解了您的问题,您希望找到包含产品1,2和3行的Orders
。您使用的是不同的实体,但基本的表格结构应该映射到您的&# 39;重新尝试做,因此解决问题的技巧将是相同的。你可以这样做:
SELECT DISTINCT o.*
FROM Orders o
INNER JOIN OrderLines l1 on l1.OrderID = o.ID AND l1.ProductID = '1'
INNER JOIN OrderLines l2 on l2.OrderID = o.ID AND l2.ProductID = '2'
INNER JOIN OrderLines l3 on l3.OrderID = o.ID AND l3.ProductID = '3'
您还可以执行排除加入,以便记录不要列表中的某个项目:
SELECT o.ID
FROM Orders o
LEFT JOIN OrderLines l on l.OrderID = o.ID AND l.ProductID IN ('1','2','3')
GROUP BY o.ID --list all columns needed in the select list here
HAVING COUNT(*) = 3
如果ProductID列表可能很长或是动态的,则此选项更容易编写(并且可能表现更好),但它假定您不会为订单中的给定产品提供多个OrderLine。