2015-04-15 2 views
-3

VENN DIAGRAM http://hom.wdfiles.com/local--files/the-logic-diagrams-of-john-venn/Venn3.PNGSQL JOIN 3 таблицы все комбинации запросов

TABLE_A (PK, VALUE)

  • | 1 | FOX |
  • | 2 | COP |
  • | 3 | TAXI |
  • | 4 | LINCOLN |
  • | 5 | АРИЗОНА |
  • | 6 | ВАШИНГТОН |
  • | 7 | DELL |
  • | 10 | LUCENT |

TABLE_B (PK, VALUE)

  • | 1 | TROT |
  • | 2 | АВТО |
  • | 3 | CAB |
  • | 6 | ПАМЯТНИКИ |
  • | 7 | ПК |
  • | 8 | MICROSOFT |
  • | 9 | APPLE |
  • | 11 | SCOTCH |

Table_C (PK, VALUE)

  • | 1 | UP |
  • | 3 | ПРАВО |
  • | 7 | ЛЕВЫЙ |
  • | 10 | ВОСТОК |
  • | 11 | ЗАПАД |
  • | 14 | DOWN |
  • | 20 | СЕВЕРНЫЙ |
  • | 21 | ЮЖНЫЙ |

Каковы MySQL JOIN запросов, которые должны быть записаны для получения каждого отдельного региона в диаграмме Венна, показанной:

Так выход для каждого региона должна отображать пары ключ-значение, что матч в каждой таблице. Проверьте 7 ниже, чтобы получить представление о том, что должно отображаться после запуска запроса.

1 => 4,5

2 => 8,9

3 => 2,6

4 => 14,20,21

5 => 10

6 => 11

7 => 1,3,7 как {(1, FOX; 1, Trot; 1, UP), (3, такси; 3, CAB, 3, справа), (7, DELL, 7, ПК, 7, LEFT)}

+0

В чем проблема? что ты уже испробовал? Где вы застряли? –

+0

В основном я застреваю, пытаясь построить все, кроме полного пересечения для 7 моего запроса, следующее: SELECT A.PK как A_PK, A.Value как A_Value, B.PK как B_PK, B.Value как B_Value, C.PK как C_PK, C.Value как C_Value из таблицы_a A INNER JOIN table_b B на A.PK = B.PK INNER JOIN table_c C на A.PK = C.PK; – Tikky

+0

Например, для области 1, что вы пробовали и где вы застряли? Почему это не работает? Это очень простые запросы 'join' и' except' ... –

ответ

0

/* 1 */

ВЫБОР A.PK, как A_PK, a.value как A_Value, B.PK как B_PK, B.Value как B_Value, C.PK как C_PK, C.Value как C_Value из table_a A LEFT JOIN table_b B на B.PK = A.PK LEFT JOIN table_c C на C.PK = A.PK, где B.PK - NULL, а C.PK - NULL;

/* 2 */

ВЫБОР A.PK, как A_PK, a.value как A_Value, B.PK как B_PK, B.Value как B_Value, C.PK как C_PK, C.Value как C_Value из table_b B LEFT JOIN table_a A на B.PK = A.PK LEFT JOIN table_c C на C.PK = B.PK, где C.PK - NULL, а A.PK - NULL;

/* 3 */

ВЫБОР A.PK, как A_PK, a.value как A_Value, B.PK как B_PK, B.Value как B_Value, C.PK как C_PK, C.Value как C_Value из table_a A INNER JOIN table_b B на A.PK = B.PK LEFT JOIN table_c C на A.PK = C.PK, где A.PK = B.PK и C.PK - NULL;

/* 4 */

ВЫБОР A.PK, как A_PK, a.value как A_Value, B.PK как B_PK, B.Value как B_Value, C.PK как C_PK, C.Value как C_Value из table_c C LEFT JOIN table_a A на C.PK = A.PK LEFT JOIN table_b B на C.PK = B.PK, где A.PK - NULL, а B.PK - NULL;

/* 5 */

ВЫБОР A.PK, как A_PK, a.value как A_Value, B.PK как B_PK, B.Value как B_Value, C.PK как C_PK, C.Value как C_Value из table_a A LEFT JOIN table_b B на A.PK = B.PK INNER JOIN table_c C на A.PK = C.PK, где A.PK = C.PK и B.PK - NULL;

/* 6 */

ВЫБОР A.PK, как A_PK, a.value как A_Value, B.PK как B_PK, B.Value как B_Value, C.PK как C_PK, C.Value как C_Value из table_b B LEFT JOIN table_a A на A.PK = B.PK INNER JOIN table_c C на B.PK = C.PK, где B.PK = C.PK и A.PK - NULL;

/* 7 */

ВЫБОР A.PK, как A_PK, a.value как A_Value, B.PK как B_PK, B.Value как B_Value, C.PK как C_PK, C.Value как C_Value из table_a A INNER JOIN table_b B на A.PK = B.PK INNER JOIN table_c C на A.PK = C.PK;

Теперь я задаюсь вопросом, может ли это быть сделано с сохранением предложения JOIN как INNER JOIN, а не смешиванием LEFT или RIGHT JOINS, но я не хочу, чтобы снова проголосовали за отправку вопроса.

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