mysql查询帮助

时间:2011-01-06 12:23:40

标签: mysql

我有一个像这样的表和数据

id | term_id | name_id 
1  |   4     | 1
2  |   6     | 1
3  |   5     | 2
4  |   6     | 2
3  |   4     | 3
4  |   6     | 3

我想要一个查询,以便我只能获得那个附加了4和6 term_id的name_id ...如果我查询4,6,2它不应该显示任何东西,因为没有named_id附加到所有三个他们或喜欢4,5它不应该显示任何东西,因为非相同的4和5

4 个答案:

答案 0 :(得分:2)

SELECT Name_ID
FROM Table1 t
WHERE term_id IN (4,6)
GROUP BY NAME_ID
HAVING COUNT(*) = 2

答案 1 :(得分:1)

就是这样(如果我明白你想要的话):

SELECT t1.name_id 
FROM table1 t1 
INNER JOIN table1 t2 ON t1.name_id=t2.name_id 
WHERE (t1.term_id = 4 AND t2.term_id=6) OR (t1.term_id = 6 AND t2.term_id=4) 
GROUP BY name_id;

当我运行此查询时,我得到了

+---------+
| name_id |
+---------+
|       1 | 
|       3 | 
+---------+

答案 2 :(得分:0)

select
      name_id
   from
      YourTable
   where
      term_id = 4 or term_id = 6
   group by 
      name_id
   having
      count(*) = 2

为了澄清正在发生的事情,您需要了解“GROUP BY”和“HAVING”背景。通过强制SQL查询来分组,将其标识为“Group By”子句的列分组为多个限定记录。这恰好是查询中的同一列。

接下来,在所有记录都经过预先限定和包含后,HAVING子句基于该组的最终结果。在这种情况下,它正在查看限定= 2的记录的COUNT(*)。

由于您担心给定的Name_ID与BOTH 4和6条款相关联,我们需要任何名称,其中的ID在BOTH中找到...因此WHERE子句的OR条件。我们想要一个人与4 OR 6相关联的记录。如果在结果中只找到一条记录(只有4或6),它们的COUNT()值将等于1并因此从结果集...只有那些符合条件的人才会有一个计数()= 2,因此包含在最终结果中......

要查看其外观,请尝试此查询...

select 
      name_id,
      count(*) as TotalTermsPerName
   from
      YourTable
   group by
      name_id

您将获得至少1个学期的所有姓名ID,以及根据您的数据可以拥有10个或更多学期的其他人。由于原始查询仅考虑4和6的条件,因此可达到的最大计数最多为2。

希望这有帮助,而不仅仅是查询答案,而不是理解事情的基础。

答案 3 :(得分:0)

SELECT DISTINCT name_id
FROM t
WHERE 
  term_id = 4
  AND
  name_id IN (SELECT name_id FROM t WHERE term_id = 6)