2015-04-15 89 views
-3

VENN DIAGRAM http://hom.wdfiles.com/local--files/the-logic-diagrams-of-john-venn/Venn3.PNGSQL JOIN表3所有查詢組合

表-A(PK,VALUE)

  • | 1 | FOX |
  • | 2 | COP |
  • | 3 |出租車|
  • | 4 | LINCOLN |
  • | 5 | ARIZONA |
  • | 6 |華盛頓|
  • | 7 |戴爾|
  • | 10 | LUCENT |

表-B(PK,VALUE)

  • | 1 | TROT |
  • | 2 | CAR |
  • | 3 | CAB |
  • | 6 | MONUMENT |
  • | 7 | PC |
  • | 8 | MICROSOFT |
  • | 9 | APPLE |
  • | 11 | SCOTCH |

Table_C(PK,VALUE)

  • | 1 | UP |
  • | 3 |正確|
  • | 7 | LEFT |
  • | 10 |東部|
  • | 11 | WEST |
  • | 14 | DOWN |
  • | 20 | NORTH |
  • | 21 | SOUTH |

什麼是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​​,TAXI; 3,CAB; 3,右), (7,DELL; 7,PC; 7,LEFT)}

+0

什麼似乎是問題?你試過什麼了?你卡在哪裏? –

+0

大多數情況下,我試圖構造一切,除了完整的十字路口7我的查詢是以下內容:SELECT A.PK as A_PK,A.Value as A_Value,B.PK as B_PK,B.Value as B_Value,C.PK作爲C_PK,C.Value作爲來自table_a的C_Value A.AK上的INNER JOIN table_b B = B.PK INNER JOIN table_c C上的A.PK = C.PK; – Tikky

+0

例如,對於區域1,您嘗試過什麼,卡住哪裏?爲什麼它不起作用?這些都是非常簡單的'加入'和'除了'查詢... –

回答

0

/* 1 */

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從table_a B.PK = A.PK LEFT JOIN table_c C上的LEFT JOIN table_b B C.PK = A.PK其中B.PK爲NULL且C.PK爲NULL;

/* 2 */

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從table_b B LEFT JOIN table_a B.PK = A.PK LEFT JOIN table_c C on C.PK = B.PK其中C.PK爲NULL且A.PK爲NULL;

/* 3 */

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從table_a A.PK上的INNER JOIN table_b B = B.PK LEFT JOIN table_c C上A.PK = C.PK其中A.PK = B.PK和C.PK爲NULL;

/* 4 */

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從table_c C LEFT JOIN table_a A.PK = A.PK LEFT JOIN table_b B.PK = B.PK A.PK爲NULL且B.PK爲NULL;

/* 5 */

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從table_a A.PK = B.PK INNER JOIN table_c C上的LEFT JOIN table_b B A.PK = C.PK其中A.PK = C.PK和B.PK爲NULL;

/* 6 */

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從table_b B LEFT JOIN table_a A A.PK = B.PK INNER JOIN table_c C on B.PK = C.PK其中B.PK = C.PK和A.PK爲NULL;

/* 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從table_a A.PK = B.PK INNER JOIN table_c A.PK = C.PK上的INNER JOIN table_b B.

現在我想知道是否可以將JOIN子句保持爲INNER JOIN,而不是將LEFT或RIGHT JOINS混合在一起,但我不想再次投票發佈問題。