【发布时间】:2018-07-22 15:55:57
【问题描述】:
我有三个表来维护 MySQL 中的投注系统。我们的用户说,不知何故,有些投注单即使中奖了也没有改变“中奖状态”。所以我正在寻找这些错误的结果。很快,我需要来自 betslips 表的 ID,这些 ID 具有来自 betslips_inner 表的匹配选项(都应该是匹配的)以及来自 bets 表的投注结果。
SELECT a.ID,a.betslip,a.bet,a.choice,c.result
FROM betslips_inner a JOIN
betslips b JOIN
bets c
ON b.won=0 AND a.betslip=b.ID AND c.ID=a.bet AND a.choice=c.result
GROUP BY a.betslip
having count(*) = (SELECT COUNT(*) FROM betslips_inner WHERE betslip = a.betslip)
这个查询给我一些结果。但是,它似乎只给了我需要的实际结果的一小部分。
我在这里缺少什么?为什么这个查询会导致我得到真实的结果,但不是所有的真实结果?
示例数据
BET
-------
ID result
1 1
2 2
3 1
4 1
-------
BETSLIPS
-------
ID won
1 0
2 0
-------
BETSLIPS_INNER
-------
ID betslip bet choice
1 1 1 1
2 1 2 2
3 1 3 1
4 2 4 2
5 2 3 1
-------
所以预期的投注单应该是 ID:1 的投注单。第二个投注单里面有一场获胜的比赛,但不是“全场比赛”。
例如,下面的查询;
SELECT a.bet as bet, a.choice as choice, b.result as result, c.ID as ID,
c.won as won
FROM betslips_inner a
JOIN bet b JOIN betslips c ON
b.ID=a.bet AND c.ID=a.betslip
WHERE a.betslip = 5128919
给我这个,
bet choice result ID won
66897 2 2 5128919 0
66895 1 1 5128919 0
66695 2 2 5128919 0
38196 2 2 5128919 0
66995 2 2 5128919 0
66686 1 1 5128919 0
66715 1 1 5128919 0
但我在第一次查询时找不到 ID 为 5128919 的投注单。 (我应该是,因为这是一张全场比赛的投注单,won=0)
【问题讨论】:
-
样本数据和期望的结果真的很有帮助。
-
将
b.won=0移出 JOIN 子句并移入 WHERE 子句时会发生什么? -
@GordonLinoff 我已经更新了我的问题。
-
@IVOGELOV 它给了我同样的结果。
-
您对示例数据应用的查询给出了所需的答案 - ID:1
标签: mysql sql relational-database