Вернуть строки из MYSQL таблицы A, где table_A.col_1 = table_b.col_2 без использования левого внешнего соединения? - PullRequest
0 голосов
/ 05 августа 2020

В базе данных MySQL с двумя таблицами table_A и table_B я хочу вернуть выбранные столбцы строк из table_A на основе сравнения со значениями в table_B. В приведенной ниже ошибочной строке резюмируется идея:

SELECT col_1, col_2, col_3 FROM table_A where table_A.col_1 = table_B.col_2;

Мне не нужны элементы из table_B.

Почему я не могу использовать левое внешнее соединение: Я пробовал это с левым внешним соединением, как показано здесь (https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/), однако база данных жалуется, что имена столбцов неоднозначны, и изменение имен столбцов таблицы в базе данных не является вариантом.

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Если имена столбцов неоднозначны, уточните их, например,

select table_A.col_1, table_A.col_2, table_A.col_3
from table_A
join table_B on table_A.col_1 = table_B.col_2

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

select a.col_1, a.col_2, a.col_3
from table_A a
join table_B b on a.col_1 = b.col_2
1 голос
/ 05 августа 2020

Мне нужны строки в table_A, чьи col1 можно найти в table_B(col_2), вы можете использовать exists:

select a.col_1, a.col_2, a.col_3 
from table_A a 
where exists (select 1 from table_B b where b.col_2 = a.col_1);

Если вам нужны строки, которых нет в table_B, затем просто измените exists на not exists.

Обратите внимание, что я добавляю к именам столбцов префикс (псевдоним) таблицы, к которой они принадлежат. Это называется квалификацией столбцов, и именно так вы избегаете проблемы неоднозначного имени столбца, с которой вы, по-видимому, столкнулись при попытке join.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...