Извлечение данных из 2 таблиц на основе соответствующей записи - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь получить данные из 2 разных таблиц, которые имеют одинаковую запись в MySQL. Вот пример данных

TABLE 1
----------------------------------
ID          NAME            MEMBER          SMS_MEMBER
1           JOHN            YES             NO
2           JOY             NO              NO
3           SMITH           NO              YES
4           ANDRES          YES             YES


TABLE 2
----------------------------------
ID          NAME            MEMBER          SMS_MEMBER
1           JOHN            YES             NO
2           JOY             NO              YES
3           SMITH           NO              YES
4           ANDRES          YES             YES

Вот мой логический запрос

SELECT * FROM TABLE1, TABLE2 
WHERE 
TABLE1.ID = TABLE2.ID 
AND 
TABLE1.NAME = TABLE2.NAME 
AND
TABLE1.EMAIL_MEMBER = TABLE2.EMAIL_MEMBER
AND
TABLE1.SMS_MEMBER = TABLE2.SMS_MEMBER;

Ожидаемый результат должен быть

----------------------------------
ID          NAME            MEMBER          SMS_MEMBER
1           JOHN            YES             NO
3           SMITH           NO              YES
4           ANDRES          YES             YES

Так как эта запись ниже имеет другое значение в поле SMS_MEMBER, поэтому она будет исключена

EXCLUDED RECORD
----------------------------------
ID          NAME            MEMBER          SMS_MEMBER
2           JOY             NO              YES

Было бы замечательно, если бы кто-то предложил рабочий запрос по нему?

Ответы [ 2 ]

2 голосов
/ 01 июля 2019

Ваш текущий запрос действительно должен работать, хотя я бы написал его, используя явное внутреннее соединение:

SELECT DISTINCT t1.*
FROM TABLE1 t1
INNER JOIN TABLE2 t2
    ON t1.ID = t2.ID AND
       t1.NAME = t2.NAME AND
       t1.MEMBER = t2.MEMBER AND
       t1.SMS_MEMBER = t2.SMS_MEMBER;

Просто для удовольствия, вот еще один способ сделать ваш запрос, используя объединение с последующей агрегацией:

SELECT ID, NAME, MEMBER, SMS_MEMBER
FROM
(
    SELECT ID, NAME, MEMBER, SMS_MEMBER FROM TABLE1
    UNION ALL
    SELECT ID, NAME, MEMBER, SMS_MEMBER FROM TABLE2
) t
GROUP BY ID, NAME, MEMBER, SMS_MEMBER
HAVING COUNT(*) = 2;

Условие HAVING COUNT(*) = 2 гарантирует, что только идентичные записи, появившиеся в обеих таблицах, окажутся в наборе результатов.

0 голосов
/ 01 июля 2019

То, что вы хотите, это intersect, но MySQL не поддерживает его.

Для полного совпадения ваш код должен в основном работать, но я бы порекомендовал:

SELECT t1.*
FROM TABLE1 t1 JOIN
     TABLE2 t2
     USING (ID, NAME, EMAIL_MEMBER, SMS_MEMBER); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...