在mysql

时间:2018-10-18 19:21:42

标签: mysql

您好,每个人都对所有这些数据库东西不熟悉,他们不停地尝试使一个测试数据库可用于一个大学项目。

我有一个名为customers和caravans的表,另一个名为customers_caravans的表将两者联系在一起。

然后我有一张决赛桌,叫做以前的作品。这详细说明了customer_caravanID的先前工作。

但是,似乎无法计算出where语句来仅提取特定客户先前工作的数据。

似乎遍历整个客户列表????

对于某人来说,这很容易解决,因为我的select命令错误或可能只是数据库的整个设计。

无论如何这里数据库...

describe customers;
+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| customerID     | int(11)      | NO   | PRI | NULL    | auto_increment |
| name           | varchar(256) | NO   |     | NULL    |                |
| street_address | varchar(256) | YES  |     | NULL    |                |
| postcode       | varchar(256) | YES  |     | NULL    |                |
| telephone      | varchar(256) | YES  |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+


describe caravans;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| caravanID   | int(11)      | NO   | PRI | NULL    | auto_increment |
| make        | varchar(256) | NO   |     | NULL    |                |
| model       | varchar(256) | NO   |     | NULL    |                |
| vin_number  | varchar(256) | YES  |     | NULL    |                |
| axle_number | tinyint(4)   | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

describe customers_caravans;
+----------------------+---------+------+-----+---------+----------------+
| Field                | Type    | Null | Key | Default | Extra          |
+----------------------+---------+------+-----+---------+----------------+
| customers_caravansID | int(11) | NO   | PRI | NULL    | auto_increment |
| customerID           | int(11) | NO   | MUL | NULL    |                |
| caravanID            | int(11) | NO   | MUL | NULL    |                |
+----------------------+---------+------+-----+---------+----------------+

describe previous_works;
+----------------------+---------------+------+-----+---------+-------+
| Field                | Type          | Null | Key | Default | Extra |
+----------------------+---------------+------+-----+---------+-------+
| customers_caravansID | int(11)       | NO   | MUL | NULL    |       |
| work                 | varchar(256)  | YES  |     | NULL    |       |
| partID               | int(11)       | YES  | MUL | NULL    |       |
| date                 | date          | YES  |     | NULL    |       |
| cost                 | decimal(13,2) | YES  |     | NULL    |       |
+----------------------+---------------+------+-----+---------+-------+

其中包含以下数据...

INSERT INTO customers (name,street_address,postcode,telephone) VALUES 
('Megan Rose Hoobar', '41-43 Barrows Street', 'IP14 6HJ', '01449 77777'),
 ('Tim 
Smith', '17 Wynton Rise', 'JF77 2AB', '01564 673742');

INSERT INTO caravans (make,model,vin_number,axle_number) VALUES 
('Elddis','Buccaneer Commodore','1HGBH41JXMN1091866','2'), 
('Lunar','Venus 590/6','1HGBH41JXMN1091111','1');

INSERT INTO customers_caravans (customerID,caravanID) VALUES ('1','1'), ('2','2');

INSERT INTO previous_works (customers_caravansID,work,partID,date,cost) 
VALUES 
('1','Service','3','2015-04-15','150'),
('1','Service','3','2016-04-15','150'), 
('1','Service','5','2017-04-15','180'),
('2','Solar Panel Fitting','1','2018-02-18','380');

在此选择中,我只想获取customers_caravansID匹配1的客户的数据,即在这种情况下,只有我让两个客户重复的服务...

select x.name
     , y.make
     , y.model
     , p.work 
  from caravans y
     , customers x
     , customers_caravans xy
     ,previous_works p
 where p.customers_caravansID = "1";
+----------------------+--------+---------------------+---------+
| name                 | make   | model               | work    |
+----------------------+--------+---------------------+---------+
| Megan Rose Hoobar  | Elddis | Buccaneer Commodore | Service |
| Megan Rose Hoobar  | Elddis | Buccaneer Commodore | Service |
| Megan Rose Hoobar  | Elddis | Buccaneer Commodore | Service |
| Megan Rose Hoobar  | Elddis | Buccaneer Commodore | Service |
| Megan Rose Hoobar  | Elddis | Buccaneer Commodore | Service |
| Megan Rose Hoobar  | Elddis | Buccaneer Commodore | Service |
| Megan Rose Hoobar  | Lunar  | Venus 590/6         | Service |
| Megan Rose Hoobar  | Lunar  | Venus 590/6         | Service |
| Megan Rose Hoobar  | Lunar  | Venus 590/6         | Service |
| Megan Rose Hoobar  | Lunar  | Venus 590/6         | Service |
| Megan Rose Hoobar  | Lunar  | Venus 590/6         | Service |
| Megan Rose Hoobar  | Lunar  | Venus 590/6         | Service |
| Tim Smith          | Elddis | Buccaneer Commodore | Service |
| Tim Smith          | Elddis | Buccaneer Commodore | Service |
| Tim Smith          | Elddis | Buccaneer Commodore | Service |
| Tim Smith          | Elddis | Buccaneer Commodore | Service |
| Tim Smith          | Elddis | Buccaneer Commodore | Service |
| Tim Smith          | Elddis | Buccaneer Commodore | Service |
| Tim Smith          | Lunar  | Venus 590/6         | Service |
| Tim Smith          | Lunar  | Venus 590/6         | Service |
| Tim Smith          | Lunar  | Venus 590/6         | Service |
| Tim Smith          | Lunar  | Venus 590/6         | Service |
| Tim Smith          | Lunar  | Venus 590/6         | Service |
| Tim Smith          | Lunar  | Venus 590/6         | Service |
+----------------------+--------+---------------------+---------+

1 个答案:

答案 0 :(得分:0)

这是您使用连接多个表的最新形式的查询。注意它如何关联每个表。

SELECT
    b.name,
    a.make,
    a.model,
    d.work
FROM caravans a
JOIN customers_caravans c
    ON a.caravamID = c.caravanID
JOIN customers b
    ON a.customerID = b.customerID
JOIN previous_works d
    ON c.customers_caravansID = d.customers_caravansID
WHERE d.customers_caravansID = "1";