我有这张桌子
recept_id raavare_id nom_netto tolerance
1 1 10 0.1
1 2 2 0.1
1 5 2 0.1
2 1 10 0.1
2 3 2 0.l
2 5 1.5 0.1
2 6 1.5 0.1
3 1 10 0.1
3 4 1.5 0.1
3 5 1.5 0.1
3 6 1 0.1
3 7 1 0.1
我试图选择raavare_id
等于6和7的行。所以我试图选择recept_id
等于{{1}的行}。
试过这个,但显然它没有用,因为你不能选择一个有2个值的字段:
3
这也不起作用,因为它会选择SELECT * FROM table_name WHERE raavare_id="6" AND raavare_id="7"
之类的其他行,因为它有一个recept_id=2
,但我想选择其中的行{{1} }等于6和7并且具有相同的raavare_id=6
:
raavare_id
忘记提及我不允许在sql-query中使用recept_id
。我需要选择SELECT * FROM table_name WHERE raavare_id="6" OR raavare_id="7"
为6和7的行,并且两者都具有相同的recept_id
。但raavare_id
不得出现在查询中。
答案 0 :(得分:3)
试试这个:
SELECT *
FROM table_name
WHERE recept_id IN (
SELECT recept_id
FROM table_name
WHERE raavare_id IN (6,7)
GROUP BY raavare_id
HAVING COUNT(DISTINCT raavare_id) = 2)
IN
运算符使用的子查询返回recept_id =3
,因为这是属于两者的raavare_id
组的id值(6,7 )价值观。
修改强>
如果您只想获取recept_id
值,则只需使用子查询:
SELECT recept_id
FROM table_name
WHERE raavare_id IN (6,7)
GROUP BY raavare_id
HAVING COUNT(DISTINCT raavare_id) = 2
答案 1 :(得分:1)
您可以使用IN,group by和having子句来执行此操作:
SELECT * FROM YourTable
WHERE recept_id in(SELECT recept_id
FROM YourTable
WHERE raavare_id in('6','7')
GROUP BY recept_id
having count(distinct raavare_id) = 2)
或者使用exists()
SELECT * FROM YourTable t
WHERE exists(SELECT 1
FROM YourTable s
WHERE t.recept_id = s.recept_id and s.raavare_id in('6','7')
GROUP BY s.recept_id
having count(distinct s.raavare_id) = 2)