2012-04-02 25 views
14

tôi có các bảng sau:MySQL Left tham gia ĐÂU table2.field = "X"

trang:

+------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+------------+--------------+------+-----+---------+----------------+ 
| page_id | int(11)  | NO | PRI | NULL | auto_increment | 
| type  | varchar(20) | NO |  | NULL |    | 
| categories | varchar(255) | NO |  | NULL |    | 
| title  | varchar(255) | NO | MUL | NULL |    | 
| text  | longtext  | NO | MUL | NULL |    | 
+------------+--------------+------+-----+---------+----------------+ 

tùy chỉnh:

+---------+------------------+------+-----+---------+-------+ 
| Field | Type    | Null | Key | Default | Extra | 
+---------+------------------+------+-----+---------+-------+ 
| page_id | int(10) unsigned | NO | PRI | NULL |  | 
| key  | varchar(255)  | NO | PRI | NULL |  | 
| value | longtext   | NO |  | NULL |  | 
+---------+------------------+------+-----+---------+-------+ 

Tôi muốn tham gia các bảng theo cách:
1) tất cả các mục nhập từ bảng đầu tiên là r eturned LEFT JOIN custom ON pages.page_id = custom.page_id
2) pages.type IN ('type_a', 'type_b', 'type_c')
3) "chìa khóa" từ bảng thứ hai có giá trị "phiếu bầu" custom.key = 'votes'

Tôi làm tất cả mọi thứ cho đến nay, nhưng điều kiện thứ ba là vấn đề. Nếu không có mục nhập cho key = 'votes' trong bảng tùy chỉnh truy vấn sẽ chỉ trả về các mục nhập này với các mục nhập. Tôi muốn trả lại NULL nếu thiếu mục nhập.

Tôi cần key = 'votes', bởi vì tôi có những mục khác cho page_id này mà quan trọng là không phải là 'phiếu' và điều này bản sao các hàng từ trang

Trả lời

23

Chỉ cần thêm contraint bạn custom.key='votes' đến LEFT JOIN

SELECT * 
FROM pages LEFT JOIN custom 
    ON pages.page_id=custom.page_id AND custom.key='votes' 
WHERE pages.type IN('type_a','type_b','type_c') ; 
+0

Weird. Tôi đã thử điều này và nó đã không hoạt động. Tôi đã thử nó ngay bây giờ và nó chỉ hoạt động. Có lẽ tôi đã làm sai thứ gì đó. Cảm ơn câu trả lời của bạn! –

+0

Điều này không làm việc cho tôi ether. Có thể là phiên bản mysql? – amilaishere

1

thử thay đổi điều kiện của bạn thành custom.key = 'votes' HOẶC custom.key là null.

3

tôi muốn làm điều đó như thế này:

SELECT * 
FROM pages 
LEFT JOIN 
    (SELECT * From custom where key='votes') cv 
    on pages.page_id = cv.page_id 
WHERE pages.type IN ('type_a', 'type_b', 'type_c');