Как выбрать записи в MySQL, имеющие несколько значений столбцов, равных конкретному набору значений? - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть две таблицы

games

idGame  guidUser  
-----------------
12       2        
13       3


wordstyped

idGame  guidUser  word
-------------------------
12       2        honey
12       2        apples
13       3        bread
13       3        water
14       4        foo
15       5        bar
16       2        bartender
12       4        bar

Я хочу выбрать записи в wordstyped, содержащие пары (idGame, guidUser), содержащиеся в играх.

Если бы значение для поиска было только одно, я мог быdo

SELECT * FROM wordstyped WHERE guidUser IN (SELECT guidUser from games)

но что, если сравниваемое значение представляет собой пару значений?

При рабочем запросе в примере будут выбраны только первые 4 записи wordstyped.

Ответы [ 4 ]

0 голосов
/ 17 декабря 2018

Это должно решить вашу проблему

SELECT * FROM wordstyped w
JOIN games g 
ON w.idGame=g.idGame
AND w.guidUser=g.guidUser
0 голосов
/ 17 декабря 2018

Вы можете использовать внутреннее объединение и сопоставлять несколько полей в состоянии JOIN

SELECT wordstyped.* FROM wordstyped 
INNER JOIN games ON 
         wordstyped.guidUser = games.guidUser 
         AND games.idGame = wordstyped.idGame
0 голосов
/ 17 декабря 2018

Вот решение для соединения:

SELECT w.idGame, w.guidUser, w.word
FROM wordstyped w
INNER JOIN games g
    ON w.idGame = g.idGame AND w.guidUser = g.guidUser;

enter image description here

Демо

0 голосов
/ 17 декабря 2018

В MySQL вы можете сделать это:

SELECT *
FROM wordstyped
WHERE (idGame, guidUser) IN (
    SELECT idGame, guidUser
    FROM games
);

Это будет соответствовать idGame, guidUser парам с подзапросом.Однако я бы порекомендовал следующее, соответствующее стандартам:

SELECT *
FROM wordstyped
WHERE EXISTS (
    SELECT 1
    FROM games
    WHERE idGame = wordstyped.idGame AND guidUser = wordstyped.guidUser
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...