查询两个合并了相同列名的表

问题描述 投票:1回答:4

我在MySQL数据库中有这些表:

买家

ID|SELLER 
----------------
0 |Paul
1 |Jean
2 |David
3 |Jack
4 |John
5 |Fred
6 |Peter

PARIS

ID|CAR
---------
0 |Toyota
1 |BMW
2 |Honda

伦敦

ID|CAR
---------
3 |Ford
4 |BMW
5 |Honda
6 |Honda

我使用以下查询:

SELECT b.id, b.seller, p.car 
FROM buyers b
JOIN paris p
ON b.id = p.id
UNION ALL
SELECT b.id, b.seller, l.car 
FROM buyers b
JOIN london l
ON g.id = l.id;

要获得以下结果:

ID|SELLER |CAR 
----------------
0 |Paul   |Toyota
1 |Jean   |BMW
2 |David  |Honda
3 |Jack   |Ford
4 |John   |BMW
5 |Fred   |Honda
6 |Peter  |Honda

我想检索“本田”为“CAR”的行,我试图用“Where car ='Honda'”附加查询,但没有成功。

谢谢你的帮助

mysql sql
4个回答
1
投票

添加

WHERE car = 'Honda';

您的查询仅涉及第二个查询,即UNION ALL之后的查询。

所以要么:

SELECT b.id, b.seller, p.car FROM buyers b JOIN paris p ON b.id = p.id
  WHERE p.car = 'Honda'
UNION ALL
SELECT b.id, b.seller, l.car FROM buyers b JOIN london l ON b.id = l.id
  WHERE p.car = 'Honda'
;

要么

SELECT id, seller, car
FROM
(
  SELECT b.id, b.seller, p.car FROM buyers b JOIN paris p ON b.id = p.id
  UNION ALL
  SELECT b.id, b.seller, l.car FROM buyers b JOIN london l ON b.id = l.id
) data
WHERE car = 'Honda';

1
投票

只是附加WHERE car = 'Honda'是模棱两可的。应该检查哪个车柱?

实现此目的的最简单方法是将现有查询包装在另一个select语句中,以便将查询应用于结果表,即

SELECT * FROM
(
    SELECT b.id, b.seller, p.car 
    FROM buyers b
    JOIN paris p
    ON b.id = p.id
    UNION ALL
    SELECT b.id, b.seller, l.car 
    FROM buyers b
    JOIN london l
    ON g.id = l.id;
)
WHERE car = 'Honda'

0
投票

你可以试试下面的查询:

select * from (
SELECT b.id, b.seller, p.car 
FROM buyers b
JOIN paris p
ON b.id = p.id
UNION ALL
SELECT b.id, b.seller, l.car 
FROM buyers b
JOIN london l
ON g.id = l.id;
)
where car = 'HONDA'

0
投票

这不是答案,而只是建议。

万一这是你真正的数据库(我很确定它不是),这里有一些建议:

  • 表名告诉我们您正在处理的实体。在您的数据库中,这是买家,parises和londons。你可能看到了你的错误;-)
  • 然后查看买家表,我们看到主列名为卖家。有没有搞错?是买方还是卖方?
  • 然后,名为ID的列应该是表的ID,并唯一标识表中的记录。但是,您正在其他表中使用买方ID,并仍然将其称为ID。
  • 在您的示例中,每个买家在伦敦或巴黎只有一个​​其他记录。如果是这种情况,那么您可以简单地将汽车作为买家表中的一列。如果你确实需要n:m关系,那么按照它们的名称来调用ID,即buyer_id等。
  • 在任何情况下都应该有一张包含每辆车一条记录的车牌表,以避免在某些记录中出现像'Homda'这样的拼写错误。
  • 您正在展示汽车品牌,但请致电cars表。如果它只是关于品牌,那么更好的名称将是brandscar_brands等。

以下是如何设计数据库的示例:

汽车

id_car | name
-------+-------
1      | BMW
2      | Ford
3      | Honda
4      | Toyota

卖家

id_seller | name
----------+------
0         | Paul
1         | Jean
2         | David
3         | Jack
4         | John
5         | Fred
6         | Peter

Sellers_Cars

id_seller | id_car
----------+-------
0         | 1
0         | 2
0         | 4
1         | 1
2         | 3
3         | 2
4         | 1
5         | 3
6         | 3
6         | 4

可能的查询:

select name as honda_seller
from sellers
where id_seller in
(
  select id_seller
  from sellers_cars
  where car_id = (select car_id from cars where name = 'Honda')
);
© www.soinside.com 2019 - 2024. All rights reserved.