2015-11-30 103 views
0

我有兩個表如下:SQL左連接沒有得到結果如預期

TABLEA

pat_id name user_id 

1  sam  1 
2  jose  1 
3  sandra 2 

tableB的

id  pat_id pat-main_name 

    1   1 MR0001 
    2   3 MR0005 

我期待的結果如下:

pat_id name user_id pat-main_name 

1  sam  1 MR0001 
2  jose  1 

user_id = 1

我所做的是:

SELECT tableA.pat_id,tableA.name,tableA.user_id,tableB.pat-main_name 
FROM tableA 
LEFT OUTER JOIN tableB 
where tableA.pat_id = tableB.pat_id AND tableA.user_id; 

和我得到的結果:

pat_id name user_id pat-main_name 

1  sam  1 MR0001 
2  jose  1 
3  Sandra 2 

我該怎麼辦?

+0

這是什麼? 'where tableA.pat_id = tableB.pat_id AND tableA.user_id;' –

回答

0

使用left join

SELECT tableA.pat_id,tableA.name,tableA.user_id,tableB.pat-main_name 
FROM tableB left join tableA 
ON tableB.pat_id = tableA.pat_id 
WHERE tableA.user_id=1 
+0

buddy它將返回所有需要的結果,我只需要與user_id 1相關的結果。請檢查我的預期結果! – Santhucool

+0

SELECT tableA.pat_id,tableA.name,tableA.user_id,tableB.pat-main_name FROM tableB JOIN tableA ON tableB.pat_id = tableA.pat_id WHERE tableA.user_id = 1 –

+0

@Rahautos,改爲左連接,並且將這樣做 –

0

這將工作:

SELECT 
tableA.pat_id, tableA.name, tableA.user_id, 
tableB.`pat-main_name` 
FROM tableA LEFT OUTER JOIN tableB ON tablea.pat_id = tableb.pat_id 
Where tablea.user_id = 1 
1

該查詢適當加入2個表:

SELECT tableA.pat_id 
    ,tableA.name 
    ,tableA.user_id 
    ,tableB.`pat-main_name` 
FROM tableA 
LEFT OUTER JOIN tableB 
    ON tableA.pat_id = tableB.pat_id; 

您原來的查詢是那種混合舊的語法和新的ANSI語法應該是首選的:

  • 舊語法=從A,B,其中AX = BX ..
  • 新的ANSI = ... JOIN ON AX = BX ..

您可以通過添加限制輸出WHERE子句如WHERE tableA.user_id = 1

它會給這個輸出:

1  sam  1 MR0001 
2  jose  1 
3  Sandra 2 NULL 

或用WHERE子句tableA.user_id = 1

1  sam  1 MR0001 
2  jose  1 
+0

我不希望最後記錄。我的意思是user_id = 1。我不想要最後一欄。否則你的查詢是正確的 – Santhucool

+0

謝謝它正在工作! – Santhucool

-1

你可以編寫查詢如下:

SELECT `t`.`name`, 
    `t1`.`pat_id`, 
    `t1`.`pat-main_name` 
    FROM tableA AS t LEFT JOIN tableB AS t1 ON `t`.`pat_id` = `t1`.`pat_id` 
相關問題