如何在SQL中使用多个WHERE?

如何在SQL中使用多个WHERE?,sql,Sql,我有两张桌子: Table A: ticket RoundID | PlayerID | num1 | num2 | num3 | num4 | num5 | num6 Table B: lotteryresult RoundID | num1 | num2 | num3 | num4 | num5 | num6 我创建了一个选择器,如下所示: SELECT roundID, UserInfo_ID, num1, num2, num3, num4 , num5, num6 FROM tick

我有两张桌子:

Table A: ticket
RoundID | PlayerID | num1 | num2 | num3 | num4 | num5 | num6

Table B: lotteryresult
RoundID | num1 | num2 | num3 | num4 | num5 | num6
我创建了一个选择器,如下所示:

SELECT roundID, UserInfo_ID, num1, num2, num3, num4 , num5, num6
FROM ticket JOIN lotteryresult ON ticket.roundID = lotteryresult.roundID
WHERE...; -- I want to match num1 to num6 to find matched numbers
问题是我不知道如何匹配num1和num6,困难在于表a中num1中的数字(例如“6”)可能位于表B中的num3


那么我能做些什么来匹配这些数字呢?

如果我理解得很好,你想要匹配
ticket.num1=lotteryresult.num6
或者
ticket.num1=lotteryresult.num3
,就像这样:
ticket.num1=lotterysult.num6或ticket.num1=lotterysult.num3

一个较短的版本是
ticket.num1 in(lotterysult.num6,lotterysult.num3)


如果需要,您可以添加更多的
lotteryresult

我不确定目标是什么:

where
    a.num1 in (b.num1, b.num2, b.num3, b.num4, b.num5, b.num6) or
    a.num2 in (b.num1, b.num2, b.num3, b.num4, b.num5, b.num6) ...
或者你想数数比赛

select *
from ticket t inner join lotteryresult r on r.roundID = t.roundID
    cross apply (
        select sum(case when pvt.num in (r.num1, r.num2, r.num3, r.num4, r.num5, r.num6) then 1 end
        from (values (t.num1), (t.num2), (t.num3), (t.num4), (t.num5), (t.num6k)) pvt(num)
) m(matches)

垂直旋转票证表和结果表;将圆形id上的数据透视表与垂直数据透视产生的六个数字之一连接起来,然后计数

下面是:

WITH
-- some input data ...
ticket(roundid , playerid , num1 , num2 , num3 , num4 , num5 , num6) AS (
            SELECT 1,1, 5,13,22,27,42,49
  UNION ALL SELECT 2,1, 5,13,22,27,42,49
  UNION ALL SELECT 3,1, 5,13,22,27,42,49
  UNION ALL SELECT 1,2, 6,14,23,28,44,48
  UNION ALL SELECT 2,2, 6,14,23,28,44,48
  UNION ALL SELECT 3,2, 6,14,23,28,44,48
  UNION ALL SELECT 1,3, 7,15,24,29,43,47
  UNION ALL SELECT 2,3, 7,15,24,29,43,47
  UNION ALL SELECT 3,3, 7,15,24,29,43,47
)
,
-- some input data ...
lotteryresult(roundid , num1 , num2 , num3 , num4 , num5 , num6) AS (
            SELECT 1,       5,    23,    29,34,36,40
  UNION ALL SELECT 2,       1,    12,    16,23,31,48
  UNION ALL SELECT 3,       4,    12,    13,19,31,46
)
,
-- real query starts here, replace comma above with "WITH"
-- need a series of integers ...
i(i) AS (
            SELECT 1
  UNION ALL SELECT 2
  UNION ALL SELECT 3
  UNION ALL SELECT 4
  UNION ALL SELECT 5
  UNION ALL SELECT 6
)
,
unpivot_tk AS (
  SELECT
    roundid
  , playerid
  , CASE i
      WHEN 1 THEN num1
      WHEN 2 THEN num2
      WHEN 3 THEN num3
      WHEN 4 THEN num4
      WHEN 5 THEN num5
      WHEN 6 THEN num6
    END AS num
  FROM ticket CROSS JOIN i
)
,
unpivot_res AS (
  SELECT
    roundid
  , CASE i
      WHEN 1 THEN num1
      WHEN 2 THEN num2
      WHEN 3 THEN num3
      WHEN 4 THEN num4
      WHEN 5 THEN num5
      WHEN 6 THEN num6
    END AS num
  FROM lotteryresult CROSS JOIN i
)
SELECT
  tk.roundid
, tk.playerid
, COUNT(*) AS hits
FROM unpivot_tk tk
JOIN unpivot_res USING(roundid,num)
GROUP BY
  tk.roundid
, tk.playerid
ORDER BY
  tk.roundid
, tk.playerid
-- out  roundid | playerid | hits 
-- out ---------+----------+------
-- out        1 |        1 |    1
-- out        1 |        2 |    1
-- out        1 |        3 |    1
-- out        2 |        2 |    2
-- out        3 |        1 |    1

结果可以作为一组六个数字提供,还是必须来自一张表?您可以在您的问题中添加,比如说,3个玩家在3个回合中(对于
彩票
,这将是9行)和3个回合的
彩票结果
,这样我就不需要键入我这边的任何结果了吗?。我有一个解决方案,但我懒得创建测试数据……在select中只能有一个
where
,如果需要多个条件,请使用