sql在哪里为单列多个条件

时间:2015-04-22 02:35:18

标签: sql

我需要满足多个条件的列。在下面的查询中,我有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]

1 个答案:

答案 0 :(得分:0)

问题是遗漏了一些信息,所以我只能解释一下如何解决这个问题。我们假设您有三个表:OrdersOrderLinesProductsOrders表包含ID(自动增量/主键)的字段,以及在此处不重要的数据。 OrderLines表格包含OrderIDProductID以及PriceQty字段,这些字段也不会在这里使用。

如果我正确理解了您的问题,您希望找到包含产品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。