Извлечение данных из таблиц с помощью объединения

#mysql #sql

#mysql #sql

Вопрос:

У меня есть две таблицы X и Y, я хочу вернуть данные из таблицы Y, где X.id=Y.id и из таблицы X, я хочу вернуть только те строки, где X.id!=Y.id .

Я написал запрос

 Select * from X left join Y on X.id=Y.id
  

но это вернуло бы мне все строки из таблицы X, где, поскольку я хочу только те, где X.id!=Y.id .

Как бы я это сделал? Я надеюсь, что вопросы понятны.

Комментарии:

1. Этот вопрос поразил меня. Я ничего не понял. Может быть, SQLFiddle ?

2. X.id!=Y.id или X.id=Y.id ? какой из них это?

3. вы пробовали Select * from X left join Y where X.id=Y.id

4. вам нужно общее поле (обычно первичный ключ в одной таблице соединяется с внешним ключом в другой). если значения в предложении ON не совпадают, на каком основании вы бы связали две таблицы? Вы знаете, для чего используется объединение?

5. Ну, давайте представим, что вы получаете данные из Y на основе условия X.id=Y.id и из X на основе условия X.id !=Y.id . Как вы хотите соединить эти два разных набора данных?

Ответ №1:

 select * from X right join Y on X.ID=Y.ID
  

или

 select * from Y left join X on X.ID=Y.ID
  

Затем вы получаете все строки из Y и те, на которые есть ссылки в X-таблице, и все данные из X-таблицы, на которые есть ссылка в Y.

Это был ваш вопрос?

Другой ответ, который я вижу в этом вопросе, таков

 with cte (X.ID,Y.ID)
as(
select x.ID,y.ID from X INNER JOIN Y ON X.ID=Y.ID
)
select * from Y  JOIN cte 
where t.id not in (cte.Y.ID)
UNION ALL
select * from cte
  

Что-то подобное (возможно, потребуется некоторая отладка, было написано без управления SQL или SQL Developper :))

Ответ №2:

Все строки Y, для которых в X существует идентификатор:

 SELECT Y.*
FROM Y 
INNER JOIN X
USING(id)
  

Все строки X, для которых нет существующего идентификатора в Y

 SELECT X.* 
FROM X 
WHERE id NOT IN (
    SELECT id
    FROM Y
)
  

Если выходные столбцы совпадают, вы могли бы выполнить ОБЪЕДИНЕНИЕ обоих запросов.

Ответ №3:

Допустим, у нас есть две таблицы, упомянутые как:-

выберите * из cmp_Company как x

выберите * из cmp_Company_Contact как y

Случай A: [Все строки, возвращенные из Y-таблицы]

выберите Y.* из cmp_Company_Contact как Y СЛЕВА ПРИСОЕДИНИТЕ cmp_Company как X К X.CO_ID = Y.CO_ID где X.CO_ID = Y.CO_ID

Случай B: [Из таблицы X не возвращаются строки]

выберите X.CO_Name из cmp_Company как X СЛЕВА ПРИСОЕДИНИТЕ cmp_Company_Contact как Y К Y.CO_ID = X.CO_ID где X.CO_ID != Y.CO_ID

Таким образом, исходя из условия, которое вы запрашиваете, данные не будут получены.

Надеюсь, это поможет.

Спасибо