对不起。我是MySQL数据库的新手。而且,我有问题。
我有一张桌子。
我想选择ID为Tag =“ XX”且数字分别为13和17的
但是如果我以此查询
SELECT ID FROM Table WHERE ( Tag="XX" and Number = 13 ) and ( Tag="XX" and Number = 17 )
我什么都没得到。
以及当我使用它时。
SELECT ID FROM Table WHERE ( Tag="XX" and Number = 13 ) or ( Tag="XX" and Number = 17 )
我得到结果“ A”和“ B”。但是我只希望“ A”,因为“ A”同时具有数字13和17的标签“ XX”,而“ B”具有数字13和16的标签“ XX”
如何从这种情况下选择ID。
答案 0 :(得分:1)
看起来您需要2条记录,因此您可以尝试以下操作:
{'20190208011713-0500': {'a': '76',
'b': '14',
'c': '99',
'd': '62',
'e': '112',
'f': '78',
'g': '20',
'h': '14',
'i': '23'}}
SELECT ID FROM Table WHERE Tag="XX" AND Number IN (13, 17)
将匹配两行带有标签“ XX”的行。
Tag="XX"
将匹配值13或17的适当行。
但是,如果您需要2条记录中的1条记录,则必须使用Number IN (13, 17)
,如下所示:
JOIN
答案 1 :(得分:0)
您不能拥有13号和17号。您需要将and切换为or。
SELECT ID FROM Table WHERE ( Tag="XX" and Number = 13 ) OR ( Tag="XX" and Number = 17 )
答案 2 :(得分:0)
使用以下查询获得所需的结果。
select id from table a where tag='XX' and number=13
and exists(select id from table b
where tag='XX' and number=17 and a.id=b.id);
您的查询将不会获取任何行,因为您试图选择的ID属于Number = 13和17的行,这是不可能的。该数字只能是13或17。
要匹配不同的标签和数字,可以使用“ set”,如下所示:
set @atag = 'XX', @anumber = 13, @bnumber = 17;
select id from table a where tag=@atag and number=@anumber
and exists(select id from table b
where tag=@atag and number=@bnumber and a.id=b.id);
o / p:
A
答案 3 :(得分:-1)
有很多方法可以实现这一目标。一个是:
SELECT ID
FROM MyTable
WHERE Tag = "XX" AND Number IN (13, 17)
GROUP BY ID
HAVING COUNT(DISTINCT Number) = 2
如果(ID,Tag,Number)的组合是UNIQUE,则还可以将HAVING子句替换为
HAVING COUNT(*) = 2
另一种方法是使用JOIN:
SELECT t1.ID
FROM MyTable t1
JOIN MyTable t1 USING(ID)
WHERE t1.Tag = "XX" AND t1.Number = 13
AND t2.Tag = "XX" AND t2.Number = 17