如何从另一列中的重复值获取ID

时间:2019-02-25 16:56:31

标签: mysql

对不起。我是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。

4 个答案:

答案 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