我有一个表和数据这样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连接到它...如果我查询4的名_ID和6 term_id, 6,2因为没有named_id连接到他们三个应该不会显示我什么或喜欢4,5,因为不具有相同的4和5
我有一个表和数据这样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连接到它...如果我查询4的名_ID和6 term_id, 6,2因为没有named_id连接到他们三个应该不会显示我什么或喜欢4,5,因为不具有相同的4和5
SELECT Name_ID
FROM Table1 t
WHERE term_id IN (4,6)
GROUP BY NAME_ID
HAVING COUNT(*) = 2
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子句是基于组的所有记录后的最终结果是通过资格预审和收录。在这种情况下,它正在查看合格记录的COUNT(*)= 2.
由于您关心的是与4和6的BOTH条款相关联的给定Name_ID,因此我们需要任何其ID为在BOTH中找到...因此WHERE子句的OR条件。我们希望,当一个人用4或6相关联。如果在结果中,只有一个记录被发现(仅4或6),它们的COUNT()值将等于1,因而从结果集中丢弃任何记录......只有那些既条款符合资格将有一个计数()= 2,因此包含在最终的结果...
要看到,否则它可能看起来像什么,尝试此查询...
select
name_id,
count(*) as TotalTermsPerName
from
YourTable
group by
name_id
你会得到所有名ID以最小的1项,和其他人可能有10项以上,基于您的数据。由于原来的查询只考虑4和6的条款,可以达到的最大数量将是最大数量为2
希望这会有所帮助,而不仅仅是查询答案,并不理解HOW的基础工作。
查询的错误有必须置于组之后 – cristian 2011-01-06 12:29:30
认为是“或”语句,但我想有些像和声明一样告诉我名字的ID与4和6没有或4或6,因为如果把4,6及二不要告诉我什么 – 2011-01-06 12:30:55
SELECT DISTINCT name_id
FROM t
WHERE
term_id = 4
AND
name_id IN (SELECT name_id FROM t WHERE term_id = 6)
这是它(如果我理解你想要的):
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 | +---------+
认为是“或”语句,但我想一些像和声明一样告诉我名字的ID与4和6没有或4或6,因为如果把4和6和2不应该告诉我什么 – 2011-01-06 12:32:49
这将返回一个名_ID为两排,同样名_ID和term_id两个4:'( -1,4,2-),(2,4,2)`。这是不正确的。 – Ishtar 2011-01-06 13:01:08