带有条件的SQL连接表

时间:2013-08-11 16:20:11

标签: sql database-design join

所以我想加入2个表,其中1表示条件:

这是我到目前为止所尝试的内容:

SELECT * FROM (ci_usertags) 
JOIN ci_tags ON ci_usertags.utag_tid
WHERE utag_uid = 1

我的表格如下:

ci_usertags 
  utag_id 
  utag_uid
  utag_tid

ci_tags 
  tag_id
  tag_name

我想为tag 1的用户选择所有ID并获取tag name。有了这个SQL,我得到了重复的结果,甚至tags都没有ID 1

的用户

3 个答案:

答案 0 :(得分:3)

您的查询是:

SELECT *
FROM (`ci_usertags`) JOIN
     `ci_tags`
     ON `ci_usertags`.`utag_tid`
WHERE `utag_uid` 

这是一种非敏感的SQL。条件是utag_tid不是0或NULL而utag_uid不是0或NULL。这是因为没有条件,因此只关注变量的值。在其他一些SQL引擎中,这会导致错误。

我想你想要这样的东西:

SELECT *
FROM `ci_usertags` ut JOIN
     `ci_tags` t
     ON ut.`utag_tid` = t.tag_id
WHERE `utag_uid` = 1

答案 1 :(得分:2)

使用嵌套查询作为替换连接(速度提升)的解决方案

Select tag_id, tag_name
FROM ci_tags
WHERE tag_id IN (Select utag_tid FROM ci_usertags WHERE utag_id = 1 GROUP BY 1)
GROUP BY 1,2

答案 2 :(得分:1)

取代:

SELECT *
FROM (`ci_usertags`) JOIN
     `ci_tags`
     ON `ci_usertags`.`utag_tid`
WHERE `utag_uid` 

在:

SELECT *
FROM `ci_usertags` ut JOIN
     `ci_tags` t
     ON ut.`utag_tid` = t.tag_id
WHERE `utag_uid` = 1