2015-06-22 2 views
-1

есть 3 таблицы.Внутреннее объединение 3 таблицы ничего не возвращает

CB стол

 CID EC ID Status CType 
     1001 1001 Active 1540 
     1004 1001 Active 4 

Таблица M

CID  EID  EC ID EID-CID 
1001  1166   1001 1166_1001 
1001  1167a   1001 1167a_1001 
1001  1167b   1001 1167b_1001 
1001  1168   1001 1168_1001 
2014.2071 1043   2018 1043_2014.2071 
1004  1166   1001 1166_1004 
1004  1167a   1001 1167a_1004 
1004  1168   1001 1168_1004 
1004  1167b   1001 1167b_1004 

Третий стол (CM)

EID   CID   EID-CID  EC ID   CType 
1043 2014.2071  1043_2014.2071  2018   4 

Я пытаюсь внутреннее соединение 3 таблицы. И я использую запрос ниже (я ссылался на страницу stackoverflow Inner Joining three tables) Мой запрос ничего не возвращает. но не выдавать сообщений об ошибках.

SELECT 
    M.EID, 
    CB.CID, 
    M.[EID-CID], 
    CB.[CType], 
    CB.[EC ID] 
FROM 
    (CB INNER JOIN M ON CB.CID = M.CID) 
    inner join CM on CM.CID=M.CID 

Результат должен быть, как этот

CID  EID  EC ID EID-CID  CType 
1001  1166 1001 1166_1001  1540 
1001  1167a 1001 1167a_1001  1540 
1001  1167b 1001 1167b_1001  1540 
1001  1168 1001 1168_1001  1540 
2014.2071 1043 2018 1043_2014.2071 5.5 
1004  1166 1001 1166_1004  4 
1004  1167a 1001 1167a_1004  4 
1004  1168 1001 1168_1004  4 
1004  1167b 1001 1167b_1004  4 
+3

Единственный CID в таблице CM имеет значение 2014.2071, это значение соответствует записи из таблицы M, но не из таблицы таблицы CB, вы не получаете результата. – Luc

+0

Если вы ожидаете, что результаты оттянутся от этого запроса, вы можете искать «левое соединение» вместо внутреннего соединения, в одном, если не обе таблицы, к которым вы присоединяетесь. Это приведет к отмене значений для таблиц, к которым вы присоединяетесь, или если нет значений для возврата, вместо этого они вернут нулевые значения. Не уверен, что это то, что вы ищете, но похоже, что это может быть так. Ссылка для справки: http://www.w3schools.com/sql/sql_join.asp – user2366842

+0

Вы на самом деле ничего не выбираете из таблицы CM, не требуется ли вам присоединиться к этой таблице? Ваша схема/проблема немного трудно понять, поскольку, похоже, существует много совпадений между вашими таблицами, их столбцами и их данными без объяснения причин. – Kritner

ответ

0

При использовании inner join только результаты, которые имеют совпадение по вступлению критериям, будут возвращены.

  1. CB таблица имеет два идентификатора: 1001, 1004
  2. M таблица имеет оба этих идентификаторов (будут возвращены в этот момент запроса)
  3. CM таблица не имеет ни идентификаторов из CB.

Ведение inner join между тремя таблиц дает нулевой результат как это должно. не

Если удалить джойн на CM вы будете иметь результаты, относящиеся к двум идентификаторам из CB, или если вы должны были присоединиться только на столах M и CM вы бы иметь свой 2014.2071 ряд, однако есть нет записи, которые существуют во всех трех таблицах. Из-за использования inner joins между всеми тремя таблицами вы получаете результаты, которые вы должны (в зависимости от того, что вы написали), что равно нулю.

0

Внутреннее соединение возвращает результаты только там, где есть совпадение. Похоже, что у вас есть типы соединений, испорченные. Основываясь на том, как вы говорите, результаты должны выглядеть, я предполагаю, что вы ищете ЛЕВЫЙ или ПРАВОЕ СОЕДИНЕНИЕ. , например.

SELECT 
M.EID, CB.CID, M.[EID-CID], CB.[CType],CB.[EC ID] 
FROM 
    (CB RIGHT JOIN M ON CB.CID = M.CID) LEFT JOIN CM on CM.CID=M.CID 

Вы можете посмотреть на этом сайте: http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

0

Ваш присоединиться к CM присоединяется на неправильные колонки: вы шутили на УУР, но вы должны присоединиться на ЭИД:

SELECT M.EID, CB.CID, M.[EID-CID], CB.[CType],CB.[EC ID] 
FROM CB 
JOIN M ON CB.CID = M.CID 
JOIN CM ON CM.EID = M.EID -- change here 

Удалены ненужные скобки.

+0

«неправильная колонка» может быть неточной; что трудно описать на основе приведенных схем и всех сокращений: O В любом случае, похоже, что изменение столбца объединения приведет к получению нулевых результатов, так как строка '2014.2071' никогда не будет возвращена на основе соединения и данных между CB и M – Kritner

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