我需要 select 两次具有基于另一个 table 的不同值的相同列名
I need to select same column name twice having deferent values based on another table
我创建了 2 tables
第一个table“存储”
注意 Id 是 PK
第二个 table 字段名称为(Id、来源、数量、目的地)的“交易”
还注意到 Id 是 PK
我的 SQL 陈述没有给我任何信息,如下所示
Select Storages.Name as 'From', Storages.Name as 'To'
from Storages,
Transactions
where Storages.Id = Transactions.Source
and Storages.Id = Transactions.Destination
我需要显示结果,即使它不明显
您可以使用两个 JOIN
获得预期结果,一个在交易源上,一个在目的地上:
SELECT s1.name AS source, s2.name AS destination
FROM transactions t
JOIN storages s1 ON s1.id = t.source
JOIN storages s2 ON s2.id = t.destination;
如果您不想多次使用相同的源和目标组合,请使用 DISTINCT
只显示一次:
SELECT DISTINCT s1.name AS source, s2.name AS destination
FROM transactions t
JOIN storages s1 ON s1.id = t.source
JOIN storages s2 ON s2.id = t.destination;
请查看 SQL 教程或文档 JOIN
的工作原理,因为这是编写 SQL 查询时最重要的事情之一。
最后一点:您的描述说您想将结果中的列命名为“From”和“To”。我建议避免这种情况,因为“FROM”是一个 SQL 关键字,所以你不能只将它用作列名。因此,我将它们命名为“Source”和“Destination”。如果你想使用“From”和“To”,你可以使用引号:
SELECT DISTINCT s1.name AS "From", s2.name AS "To"
FROM transactions t
JOIN storages s1 ON s1.id = t.source
JOIN storages s2 ON s2.id = t.destination;
我创建了 2 tables 第一个table“存储” 注意 Id 是 PK
第二个 table 字段名称为(Id、来源、数量、目的地)的“交易” 还注意到 Id 是 PK
我的 SQL 陈述没有给我任何信息,如下所示
Select Storages.Name as 'From', Storages.Name as 'To'
from Storages,
Transactions
where Storages.Id = Transactions.Source
and Storages.Id = Transactions.Destination
我需要显示结果,即使它不明显
您可以使用两个 JOIN
获得预期结果,一个在交易源上,一个在目的地上:
SELECT s1.name AS source, s2.name AS destination
FROM transactions t
JOIN storages s1 ON s1.id = t.source
JOIN storages s2 ON s2.id = t.destination;
如果您不想多次使用相同的源和目标组合,请使用 DISTINCT
只显示一次:
SELECT DISTINCT s1.name AS source, s2.name AS destination
FROM transactions t
JOIN storages s1 ON s1.id = t.source
JOIN storages s2 ON s2.id = t.destination;
请查看 SQL 教程或文档 JOIN
的工作原理,因为这是编写 SQL 查询时最重要的事情之一。
最后一点:您的描述说您想将结果中的列命名为“From”和“To”。我建议避免这种情况,因为“FROM”是一个 SQL 关键字,所以你不能只将它用作列名。因此,我将它们命名为“Source”和“Destination”。如果你想使用“From”和“To”,你可以使用引号:
SELECT DISTINCT s1.name AS "From", s2.name AS "To"
FROM transactions t
JOIN storages s1 ON s1.id = t.source
JOIN storages s2 ON s2.id = t.destination;