2015-12-10 49 views
2

我想列出所有的销售,这与客户ID链接的所有销售,所以我希望看到查找每个客户

sale ID customerID customerfirstname customerlastname 
1   1    J     Bloggs 
2   2    G     Green 
3   1    J     Bloggs 

这是我没有远,它不是完全正确...

SELECT sale.sale_id 
     customer.customer_id , 
     customer.customer_first_name , 
     customer.customer_last_name , 
FROM mydb.customer , mydb.sale 
WHERE sale.sale_id = customer_id 

这里是我的结构

CREATE TABLE `sale` (
    `sale_id` int(11) NOT NULL, 
    `sale_items` int(3) NOT NULL, 
    `sale_paid` tinyint(1) DEFAULT NULL, 
    `customer_customer_id` int(11) NOT NULL, 
    PRIMARY KEY (`sale_id`,`customer_customer_id`), 
    KEY `fk_sale_customer1_idx` (`customer_customer_id`), 
    CONSTRAINT `fk_sale_customer1` FOREIGN KEY (`customer_customer_id`) REFERENCES `customer` (`customer_id`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


CREATE TABLE `customer` (
    `customer_id` int(11) NOT NULL, 
    `customer_first_name` varchar(45) DEFAULT NULL, 
    `customer_last_name` varchar(45) DEFAULT NULL, 
    `customer_address1` varchar(45) DEFAULT NULL, 
    `customer_address2` varchar(45) DEFAULT NULL, 
    `customer_address3` varchar(45) DEFAULT NULL, 
    `customer_post_code` varchar(45) DEFAULT NULL, 
    `customer_debit` varchar(45) DEFAULT NULL, 
    PRIMARY KEY (`customer_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
+1

请分享您的表格结构 – Mureinik

+0

完成后,我认为... – Badja

回答

1

您加入错误的字段 - 两个表都有一个引用客户ID的列,您应该使用该列。此外,您必须在选择列表中的最后一个项目后,在冗余逗号和失踪的第一个项目之后的一个:

SELECT sale.sale_id, 
     customer.customer_id, 
     customer.customer_first_name, 
     customer.customer_last_name 
FROM customer, sale 
WHERE sale.customer_customer_id = customer.customer_id 

注意,但是,使用隐式连接(即具有在from多个表条款)的支持和鼓励,你可能应该使用明确加入代替:

SELECT sale.sale_id, 
     customer.customer_id, 
     customer.customer_first_name, 
     customer.customer_last_name 
FROM customer 
JOIN sale ON sale.customer_customer_id = customer.customer_id 
+0

工作完美!使用第二个 – Badja

2

你需要使用JOIN连接表。 从看你的表,它看起来像customer_customer_idsale表匹配的客户ID列:

SELECT sale.sale_id 
     customer.customer_id , 
     customer.customer_first_name , 
     customer.customer_last_name 
FROM customer INNER JOIN sale on 
sale.customer_customer_id = customer.customer_id 
+0

它说''customer.customer_id'中的'.'出乎意料? – Badja

+0

@Badja - 它只能在没有表名的情况下使用'customer_id',因为这个列名不会出现在另一个表上,所以它不是不明确的。在我看来,最好添加表名。使其更具可读性 –

2

你应该加入客户ID客户ID,而不是出售ID。

SELECT sale.sale_id, 
     customer.customer_id , 
     customer.customer_first_name , 
     customer.customer_last_name 
FROM mydb.customer INNER JOIN mydb.sale ON sale.customer_customer_id = customer.customer_id 
+0

并且在选择段中的'customer.customer_last_name'之后还有一个冗余逗号 –

+0

糟糕,谢谢!纠正。 – Shadow

+0

它说'customer.customer_id'中的'.'是意外的吗? – Badja

1

为了您的结构应该是这样的:

SELECT s.sale_id 
     s.customer_id , 
     c.customer_first_name , 
     c.customer_last_name , 
FROM 
    mydb.customer c 
INNER JOIN 
    mydb.sale s 
ON 
    s.customer_id = c.customer_id