0

因此,我想加入 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

我想为1tag的用户选择所有 sID并获取tag name. 使用此 SQL,我得到重复的结果,甚至tags不适合ID1的用户

4

3 回答 3

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
于 2013-08-11T16:22:55.983 回答
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
于 2013-08-11T16:26:25.673 回答
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
于 2013-08-11T16:24:08.520 回答