2012-11-09 70 views
0

我有2個表所示:SQL/MySQL的選擇項目使用JOIN

CREATE TABLE IF NOT EXISTS tb_item (
    item_id INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    item_name VARCHAR(100) NULL , 
    PRIMARY KEY (item_id) 
ENGINE = InnoDB; 


CREATE TABLE IF NOT EXISTS tb_item_img (
    item_img_id INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    item_img_thumb ENUM('0','1') NULL DEFAULT '0' , 
    item_img_image VARCHAR(100) NULL , 
    item_id INT UNSIGNED NOT NULL , 
    PRIMARY KEY (item_img_id) , 
    INDEX fk_tb_item_img_tb_item1_idx (item_id ASC) , 
    CONSTRAINT fk_tb_item_img_tb_item1 
    FOREIGN KEY (item_id) 
    REFERENCES tb_item (item_id) 
    ON DELETE RESTRICT 
    ON UPDATE RESTRICT) 
ENGINE = InnoDB; 

而且我有一個查詢,我想從tb_item只是一個圖像選擇所有項目的每個項目,我贏了「T喜歡使用子查詢,我使用JOIN 這樣的:

SELECT `item_id`, `item_name`, `item_img_image` 
FROM (`tb_item`) 
INNER JOIN `tb_item_img` USING (`item_id`) 
LIMIT 8 

但是,當項目已經超過100倍的圖像,它返回超過1次。 當該項目沒有圖像時,它未被選中。

所以,我的問題是:是否有可能,像上面這樣的查詢,選擇所有項目和1圖像或NULL到圖像字段。但只是每個item_id

回答

0

號爲了公平起見,獲取項目時,他們沒有圖像可以做一個USINT LEFT OUTER JOIN。但是,使用SQL無法獲得只符合滿足限制的文件之一的連接。

更新:當然這裏不包括MAX()或MIN()等集合函數,但這些不適用於這種情況。與子選擇是可能的,雖然重:-)

0

這是不可能的內部連接。

由於您使用的小限制,你應該使用這個

SELECT 
    `item_id`, 
    `item_name`, 
    (select `item_img_image` from `tb_item_img` where `item_id` = `tb_item`.`item_id`) as `item_img_image` 
FROM (`tb_item`) 
LIMIT 8 

嘗試也由tb_item一列進行排序,然後限制有同樣的結果始終。

+0

是的,這個很容易。但我正在嘗試一些不同的東西。沒有子查詢。 –

0

此查詢將顯示所有記錄從兩個表 -

SELECT * FROM tb_item t1 
    LEFT JOIN tb_item_img t2 
    ON t1.item_id = t2.item_id 

如果你想爲每一個item_id記錄,那麼你需要組的結果。例如 -

SELECT 
    t1.*, GROUP_CONCAT(t2.item_img_id) 
FROM tb_item t1 
    LEFT JOIN tb_item_img t2 
    ON t1.item_id = t2.item_id 
GROUP BY 
    t1.item_id 

GROUP_CONCAT等多功能於一體的細胞(用逗號分隔的風格)返回子值。


如果只有一個item_img_imageitem_img_thumb = 1,則嘗試此查詢 -

SELECT 
    t1.*, t2.item_img_image -- GROUP_CONCAT(t2.item_img_image) 
FROM tb_item t1 
    LEFT JOIN tb_item_img t2 
    ON t1.item_id = t2.item_id 
WHERE 
    t2.item_img_thumb = 1 
GROUP BY 
    t1.item_id 

...如果有多個的,然後應用聚合函數,例如 - GROUP_CONCAT。

+0

謝謝..我不記得關於小組。現在我快到了。唯一出錯的是:item_img_image應該是'item_img_thumb ='1'的那個。 –

+0

我在這個[link](http://www.cafewebmaster.com/mysql-order-sort-group)上找到了一些關於我想要的@Devart解決方案。 –

+0

看看答案。 – Devart