选择列的多个索引字段

时间:2016-03-02 09:15:05

标签: mysql sql

我有这张桌子

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不得出现在查询中。

2 个答案:

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