2013-06-11 5 views
0

у меня есть две таблицы TABLEAОбъединить две таблицы с не повторяющимися значениями

id name 
1  asd 
2  afg 
3  qwe 
4  dsf 

TableB

id desc uni 
1  kfgh asad 
1  oiuy asad 
1  wert asad 
3  wewe sfds 
4  lkjh qwer 
4  poiu qwer 

теперь я хочу присоединиться обе эти таблицы , чтобы получить значения в столбце uni, когда я попытался внутреннее соединение

SELECT  uni FROM  tableA as A JOIN tableB as B ON A.id = B.id 

Это дает мне все строки в Та bleB.as вы заметили строку с идентификатором 1 три раза. И я не могу использовать здесь отдельный элемент, так как это небольшая часть большого запроса, и этот оператор объединения повлияет на весь запрос. Может кто-нибудь сказать мне, какое соединение, которое я надо попробовать.

+0

ли содержимое поля «уни» непосредственно на зависимого от поля «ID»? Если да, вы можете подумать о переносе этих отношений в свою таблицу. –

+0

Разве вы не можете использовать разные в подзапросе? – gareththegeek

+0

@HaukeP. fild «uni» напрямую зависит от поля «id». Но я не понимаю вашего предложения. Пожалуйста, добавьте его как anser – Athul

ответ

1

использовать вспомогательный запрос, чтобы получить различные биты вам нужно

SELECT DISTINCT id, uni FROM tableb 

так

SELECT  
    uni 
FROM 
    tableA as A 
JOIN (
     SELECT DISTINCT id, uni FROM tableb 
    ) as B 
ON A.id = B.id 

EDIT , если вы хотите, чтобы все строки из TABLEA - вы должны использовать левое соединение

SELECT  
    a.id, 
    b.uni 
FROM 
    tableA as A 
LEFT JOIN (
     SELECT DISTINCT id, uni FROM tableb 
    ) as B 
ON A.id = B.id 
+0

, ваш запрос работает нормально, за исключением того, что он не возвращает строку с id = 2. Поскольку это часть большого запроса, я не могу оставить эту строку здесь – Athul

+0

, пожалуйста, внесите свой вопрос, чтобы показать, какой результат вы ожидаете. Я не вижу uni, соответствующий id = 2 –

0

Ваши таблицы не выглядят normalized. В частности, они, похоже, нарушают second normal form.

Чтобы исправить это, вы должны изменить структуру таблицы в нечто вроде следующего:

TableA

id name 
1  asd 
2  afg 
3  qwe 
4  dsf 

Таблица Unis

id uni 
1  asad 
3  sfds 
4  qwer 

Таблица десков

id desc 
1  kfgh 
1  oiuy 
1  wert 
3  wewe 
4  lkjh 
4  poiu 

И использовать этот запрос:

SELECT unis.uni FROM tableA AS A JOIN tableUnis AS unis ON A.id = unis.id 
+0

Хм? Почему это произошло? Где моя ошибка? –

+0

Я согласен с вами по нормализации –

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