2017-09-04 33 views
1

我嘗試做別的什麼沒有ID:MySQL的左連接與表B中沒有比賽,對這樣的表A

表A

NameID | name | other rows 
1  | name1 
2  | nameA 
3  | nameX 

表B

UniqueID | NameID | other rows 
1  | 1 
2  | 2 
3  | 6 
4  | 17 
5  | 22 

沒有我想做一個這樣的選擇:

SELECT tablea.ID, tablea.name, tableb.* 
      FROM tablea 
      LEFT JOIN tableb ON tablea.ID = tableb.ID 
      WHERE 
      tablea.ID != '0' 

我現在搜索ID和名稱。

我得到allways的名字,但不是allways的ID,只有當ID也在表B中。爲什麼?

我的結果是這樣的:

ID | name 
1 | name1 
2 | nameA 
NULL | nameX 

我有這樣的情況: 我在表A片(有姓名,DATAS等)。在表B中,我有 這些電影的收視率。現在我使用表單進行搜索,並希望看到所有電影的評分不全,或者根本沒有收視率,或者任何電影,儘管它有或沒有評級。

在TABLE A(所有電影)上加上一個LEFT JOIN,並且加上ON-Condition I搜索電影是否有評級(是或不在表B中)。 我的結果讓我知道電影的名字,總之。但是,如果movieID不在表B中(=沒有記錄評級),我不會在結果中獲得表A中的電影ID。 因此,不是我的整個結果是NULL只有movieID,我可以從這個電影的表A中拉出任何其他數據,但不是ID。

爲什麼?

如果ID位於ON期,是不是可以要求tablea.ID?

+0

WHERE正在將LEFT JOIN轉換爲INNER JOIN ..您應該將WHERE語句移動到ON子句 –

+0

我正確理解WHERE是用於tablea還是ON用於tableb我將它與? WHERE如何將LEFT加入INNER JOIN? –

+1

你在'tablea.ID = tableb.ID'中加入了什麼'ID'? 'NameID'?/ –

回答

0

解決方法是爲表1中的行設置一個別名,該行在第二個表中重複,並且由於第二個表中沒有「行」,結果空值。 如果我把一個別名放進去,我可以選擇它,而LEFT JOIN會完成剩下的工作。

知道的事情:如果行的名稱在選擇的其他表中是identic,則mysql_fetch_object將始終選擇最後一行提到的行。在我的情況下,我LEFT JOIN與同一行名稱的第二個表。由於LEFT JOIN,我在ON條件中沒有結果,查詢的正確結果是NULL。

0

左連接將顯示第一個表中的所有行,並在找到匹配的行時添加第二個表中的數據。 如果找不到匹配的行,則左連接將針對這些行返回空值(表示「未知」)。 如果您想放棄在其他表中沒有匹配行的行,則必須使用「內連接」而不是「左連接」。 查看連接的直觀表示以獲取更多信息:https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

+0

我試着更好地解釋它。 我總共有3個表格和一個表格,我可以使用下拉菜單來選擇,我從這些表格中搜索出來。我有一個代碼,把它加入條件到這個選擇和條件。 所以可能發生,有時候,我不想在tableb中搜索任何東西,所以我必須從這張表中選擇ALL。所以我需要LEFT JOIN。問題是,我從表A中得到名稱,但是在同一表A中沒有出同一行中的ID。 我認爲這是因爲我的左連接是ON tableA.ID = tableB.ID ...在表B中可能不匹配。 –

相關問題