2010-05-25 3 views
1

Table1 имеет u_name, Table2 имеет u_name, u_type и u_adminMySQL присоединиться к проблеме

  1. Table1.u_name уникален. Но ни одно из трех полей в таблице 2 не является уникальным.

  2. Для любого значения Table1.u_name в таблице 2 указано от 0 до многих записей, что Table2.u_name соответствует этому значению.

  3. Для любого значения Table1.u_name есть 0 до 1 записей в Table2, что Table2.u_name равняется этому значению И Table2.u_type = 'S'

То, что я хочу: Используйте Table1.u_name для получения таблицы 1. , Table2.u_admin где Table1.u_name = Tabl2.u_name и Table2.u_type = 'S'. Если такой таблицы нет в таблице 2, нам все равно нужно получить таблицу 1.

Пожалуйста, помогите мне дать некоторые подсказки. Спасибо огромное!

ответ

0

Предлагаю вам прочитать о «внешнем соединении», в частности «левом внешнем соединении», которое вы хотите. Внешнее соединение возвращает все строки из одной таблицы, возвращая значения нулей для значений из объединенной таблицы, где нет строки, соответствующей ключу.

Любой из них должен работать

select table1.*, table2.u_admin from table1 left join table2 
on table1.u_name=table2.u_name and table2.type='S' 

Или

with a as (select u_name,u_admin from table2 where type='S') 
select table1.*,a.u_admin from table1 left join a on table1.u_name=a.u_name 
+0

Я думал, оставил присоединиться == левое внешнее соединение. Ты прав. Спасибо огромное! – lonelyloner

+0

Он делает. Ключ к вашей проблеме заключается в том, чтобы сначала поставить type = 'S' в таблицу join или filter2 (концептуально), чтобы вы не удаляли нужные строки. –

+0

Я поставил table2.type = 'S' в предложение where. Это и есть точка. Еще раз спасибо! – lonelyloner

Смежные вопросы