簡體   English   中英

MySQL通過另一個表找到行

[英]MySQL find row through another table

我有兩張桌子:

游戲

`id`        INT(11)

game_tags

`game`      INT(11)
`tag_id`    INT(11)

game_tags.game = game.id

我對MySQL很恐怖,所以這是我的問題:我希望能夠找到哪些games有一定數量的tag_id 所以,如果我有四個tag_idtag_id ),我希望能夠通過查看game_tags表找到哪些游戲將擁有所有這四個標簽。 這是我的意思的一個例子:

偽MySQL的:

SELECT *
FROM `games`
WHERE (search through game_tags table and find which rows have the same `game` field and all of the tag_id's that I need to search for)
LIMIT 0, 15

我知道我解釋了這個可怕的(不能在我的腦海里說出來),所以如果你有任何問題,請發表評論。

您可以使用group byhaving子句以及Bassam的查詢來確保您已找到給定游戲的所有四個ID。

select
    game.*
from game
    join game_tags on game.id = game_tags.game
where
    tag_id in (3, 5, 7, 11)
group by
    game.id
having 
    count(distinct tag_id) = 4;

請注意,這是因為having子句在聚合count(distinct ...)運行之后運行,而where子句沒有此信息。

SELECT games.*
FROM games
     INNER JOIN 
     (SELECT game, COUNT(DISTINCT tag_id) AS gameCnt
      FROM game_tags
      WHERE tag_id in (3, 5, 7, 11)
      GROUP BY game) t on games.id = game
WHERE gameCnt = 4

你可以做四個內連接,並添加四個條件喜歡

t1.tag_id = 1和t2.tag_id = 2和....

這給你你想要的。 但可能有更好的表現方式

是的,這是一個有趣的方法。 查詢不好。 但也可以這樣做。 純娛樂!

SELECT game, BIT_OR(pow(2,tag_id)) AS tags 
FROM game_tags 
GROUP BY game 
HAVING tags = pow(2,3) + pow(2,5) + pow(2,7) + pow(2,11);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM