2011-12-10 18 views
0

我試圖連接兩個表像這樣的每一行中的零...MySQL的加入導致現場有結果集

SELECT * FROM lists l 
INNER JOIN products p USING (list_id) 

這裏是show create table這兩個表..

CREATE TABLE `lists` (
    `list_id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `list_name` varchar(255) NOT NULL, 
    `deleted` tinyint(4) NOT NULL DEFAULT '0' 
    PRIMARY KEY (`list_id`), 
    KEY `index1` (`list_name`), 
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 

CREATE TABLE `products` (
    `product_id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `list_id` bigint(20) unsigned NOT NULL DEFAULT '0', 
    `deleted` tinyint(4) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`product_id`), 
    KEY `index2` (`deleted`) 
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 

下面是上面查詢的結果:

l.list_id:l.list_name:l.deleted:p.product_id:p.deleted

1 Christmas 0 1 1 
1 Christmas 0 2 0 
1 Christmas 0 3 0 
1 Christmas 0 4 0 
4 New Year 0 8 0 
4 New Year 0 9 0 
4 New Year 0 10 0 

你看到l.deleted列有全零嗎?在表lists中,有一些行的值爲deleted列中的其他值,如1,2,...。但加入表格總是顯示deleted列全部爲零。

這是怎麼發生的?我在這裏錯過了什麼?

+0

這是整個結果的查詢設置如果是這樣,那麼就意味着表1和4沒有被刪除,並列出2,3(如果存在)不具備產品?與它們相關,因此它們不顯示在結果集中。你可以創建你的表和數據資源管理器「(http://data.stackexchange.com/stackoverflow/query/new)中的數據集,並在此共享鏈接? – melihcelik

回答

0

我建議你使用不同的語法來表達你的JOIN。如果使用ON語法,則您將更清楚地知道什麼是加入的內容。這是風格。

試試這個:

SELECT * FROM lists l 
INNER JOIN products p ON l.list_id = p.list_id 

不過,我懷疑你有你的lists表不爲零的項目(與deleted列值,這是不是在你的products錶轉動起來要查看這些。在結果集中試試這個:

SELECT * FROM lists l 
LEFT JOIN products p ON l.list_id = p.list_id