2011-02-11 25 views
0

数据库表为什么不能使用JOIN?

ss_merchant

+----------------+--------------+------+-----+---------+----------------+ 
| Field   | Type   | Null | Key | Default | Extra   | 
+----------------+--------------+------+-----+---------+----------------+ 
| pk_merchant_id | bigint(20) | NO | PRI | NULL | auto_increment | 
| name   | varchar(45) | YES |  | NULL |    | 
| website  | varchar(100) | YES |  | NULL |    | 
+----------------+--------------+------+-----+---------+----------------+ 

ss_merchant_store

+----------------------+-------------+------+-----+---------+----------------+ 
| Field    | Type  | Null | Key | Default | Extra   | 
+----------------------+-------------+------+-----+---------+----------------+ 
| pk_merchant_store_id | bigint(20) | NO | PRI | NULL | auto_increment | 
| fk_pk_merchant_id | bigint(20) | YES |  | NULL |    | 
| street    | varchar(20) | YES |  | NULL |    | 
| city     | varchar(20) | YES |  | NULL |    | 
| postcode    | varchar(8) | YES |  | NULL |    | 
| telephone   | varchar(15) | YES |  | NULL |    | 
| email    | varchar(45) | YES |  | NULL |    | 
+----------------------+-------------+------+-----+---------+----------------+ 

ss_merchant_store_rating

+-----------------------------+------------+------+-----+---------+----------------+ 
| Field      | Type  | Null | Key | Default | Extra   | 
+-----------------------------+------------+------+-----+---------+----------------+ 
| pk_merchant_store_rating_id | bigint(20) | NO | PRI | NULL | auto_increment | 
| fk_pk_merchant_store_id  | bigint(20) | NO |  | NULL |    | 
| rating      | int(1)  | YES |  | NULL |    | 
+-----------------------------+------------+------+-----+---------+----------------+ 

和我的查询:

SELECT * 
FROM ss_merchant 
JOIN ss_merchant_stores 
ON ss_merchant.pk_merchant_id = ss_merchant_stores.fk_pk_merchant_id 
JOIN ss_merchant_store_rating 
ON ss_merchant_stores.pk_merchant_store_id = ss_merchant_store_rating.fk_pk_merchant_store_id 
+2

是您的表称为ss_merchant_stores或ss_merchant_store? – 2011-02-11 11:03:56

回答

1

您的连接没有任何特别的错误,但它确实假设所有三个表格至少每个merchant_id都有一行。如果你想允许不存在的merchant_store_rating行考虑使用LEFT JOIN

​​
SELECT left_tbl.* FROM left_tbl LEFT JOIN right_tbl 
ON left_tbl.id = right_tbl.id WHERE right_tbl.id IS NULL; 

This example finds all rows in left_tbl with an id value that is not present in right_tbl (that is, all rows in left_tbl with no corresponding row in right_tbl). This assumes that right_tbl.id is declared NOT NULL.