表:mytable
id created_on status purchase_price_without_tax purchase_tax
1 2015-08-07 00:00:00 1 3322.80 5.00
1 2015-07-15 15:16:23 7 3599.00 71.98
1 2015-07-14 15:16:23 2 3599.00 71.98
1 2015-07-16 15:16:23 4 3599.00 91.98
1 2015-07-17 15:16:23 5 3599.00 21.98
这是我的查询
SELECT * FROM mytable
WHERE
(IF( `status` IN('1','2') , (`status` IN('1','2')), (`status` IN('7')) ) )
AND id=1
但没有得到正确的结果,因为我希望它是这样的:
where
IF (`status`=1 OR `status`=2 )
then status IN ('1','2')
ELSE
`status`=7
注意:如果状态为1或2,则它将保留所有其他状态行,并仅选择状态为1或2的行。如果没有状态为1或2的行,则仅选择status = 7
的行答案 0 :(得分:1)
使用UNION
两个查询来测试这两种情况。
SELECT *
FROM mytable
WHERE status IN (1, 2)
AND EXISTS (SELECT 1 FROM mytable WHERE status IN (1, 2))
UNION
SELECT *
FROM mytable
WHERE status = 7
AND NOT EXISTS (SELECT 1 FROM mytable WHERE status IN (1, 2))