我怎样才能正确地执行此 SQL 查询?
How can I do this SQL query correctly?
我有一个 SQL table 有 3 个字段,都是 ID,都是外键,但是,前两个字段引用另一个 [=21= 中的同一个字段].我需要用 3 个 ID 显示这个 table,但我想显示与这些 ID 相对应的名称,这是我目前得到的查询:
SELECT A.name as C1, B.name as C2, P1.name as PN
FROM country A
JOIN country_comm CC1 ON A.id=CC1.exporter_id
JOIN product P1 ON CC1.product_id=P1.id
JOIN country B JOIN country_comm CC2 ON B.id=CC2.importer_id
JOIN product P2 ON CC2.product_id=P2.id
当然我得到的结果不是我想要的,这是我得到的:
C1 |C2 |P1
Brazil |Argentina|Copper
Brazil |Argentina|Iron
Albania|Argentina|Stone
Brazil |Germany |Copper
Brazil |Germany |Iron
Albania|Germany |Stone
Brazil |Argentina|Copper
Brazil |Argentina|Iron
Albania|Argentina|Stone
这就是我想要的:
C1 |C2 |P1
Brazil |Argentina|Copper
Brazil |Germany |Iron
Albania|Argentina|Stone
据推测,每个 product
在 country_comm
中有一行,其中两列引用 table country
。如果是这样,您可以将查询表述为:
select c1.name as importer_country, c2.name as exporter_country, p.name as product_name
from product p
inner join country_comm cc on cc.product_id = p.id
inner join country c1 on c1.id = cc.importer_id
inner join country c2 on c2.id = cc.exporter_id
在下一种方法中,您可以 select 来自 country_comm
table 的所有行并加入字典 table 以将 id 翻译成如下名称:
select
importer.name as importer_country,
exporter.name as exporter_country,
product.name as product_name
from country_comm cc
join product on product.id = cc.product_id
join country importer on importer.id = cc.importer_id
join country exporter on exporter.id = cc.exporter_id
;
我有一个 SQL table 有 3 个字段,都是 ID,都是外键,但是,前两个字段引用另一个 [=21= 中的同一个字段].我需要用 3 个 ID 显示这个 table,但我想显示与这些 ID 相对应的名称,这是我目前得到的查询:
SELECT A.name as C1, B.name as C2, P1.name as PN
FROM country A
JOIN country_comm CC1 ON A.id=CC1.exporter_id
JOIN product P1 ON CC1.product_id=P1.id
JOIN country B JOIN country_comm CC2 ON B.id=CC2.importer_id
JOIN product P2 ON CC2.product_id=P2.id
当然我得到的结果不是我想要的,这是我得到的:
C1 |C2 |P1
Brazil |Argentina|Copper
Brazil |Argentina|Iron
Albania|Argentina|Stone
Brazil |Germany |Copper
Brazil |Germany |Iron
Albania|Germany |Stone
Brazil |Argentina|Copper
Brazil |Argentina|Iron
Albania|Argentina|Stone
这就是我想要的:
C1 |C2 |P1
Brazil |Argentina|Copper
Brazil |Germany |Iron
Albania|Argentina|Stone
据推测,每个 product
在 country_comm
中有一行,其中两列引用 table country
。如果是这样,您可以将查询表述为:
select c1.name as importer_country, c2.name as exporter_country, p.name as product_name
from product p
inner join country_comm cc on cc.product_id = p.id
inner join country c1 on c1.id = cc.importer_id
inner join country c2 on c2.id = cc.exporter_id
在下一种方法中,您可以 select 来自 country_comm
table 的所有行并加入字典 table 以将 id 翻译成如下名称:
select
importer.name as importer_country,
exporter.name as exporter_country,
product.name as product_name
from country_comm cc
join product on product.id = cc.product_id
join country importer on importer.id = cc.importer_id
join country exporter on exporter.id = cc.exporter_id
;