我有一个我想写的查询:
select busnumber from bus where busnumber in
(select frombusnumber, tobusnumber from transformer where transformernumber = 1 or transformernumber = 1);
然而,“从变压器中选择frombusnumber,tobusnumber”给了我一些问题。我知道我可以用OR语句写两次并指定每一列:
select busnumber from bus where busnumber in
(select frombusnumber from transformer where tobusnumber = 1 or frombusnumber = 1)
or busnumber in (select tobusnumber from transformer where frombusnumber = 1 or tobusnumber = 1);
但是我想知道在我需要将大量列结果合并在一起的情况下,这是否是完成此任务的唯一方法,以避免大量的OR语句。
答案 0 :(得分:0)
您可以使用 union 运算符组合两个或多个SELECT语句的结果集。例如:
从总线所在的公交车中选择公交号码 ( 从变压器中选择frombusnumber,其中frombusnumber = 1 的联合强> 从变压器中选择tobusnumber,其中tobusnumber = 1 )
答案 1 :(得分:0)
我认为最有效的方法可能是:
select b.busnumber
from bus b
where b.busnumber = 1 or
b.busnumber in (select t.frombusnumber from transformer t where t.tobusnumber = 1) or
b.busnumber in (select t.tobusnumber from transformer t where t.frombusnumber = 1);
答案 2 :(得分:0)
请尝试以下方法......
SELECT busnumber
FROM busnumber
WHERE busnumber IN ( SELECT frombusnumber
FROM transformer
WHERE transformernumber = 1
UNION
SELECT tobusnumber
FROM transformer
WHERE transformernumber = 1 );
使用IN
语句,您需要将单个字段与公交号码列表WHERE transformernumber = 1
进行比较。因此,列表应该是一列总线编号。
只需使用frombusnumber
运算符将tobusnumber
列表加入UNION
列表,即可形成此列表。这称为垂直连接 - 更为熟悉的JOIN
,LEFT JOIN
等是水平连接的类型。
如果您有任何问题或意见,请随时发表评论。
进一步阅读
答案 3 :(得分:0)
您似乎对“busnumber”感兴趣,您可以直接在“变压器”表中找到它。 我们可以使用以下查询获得结果。
Select distinct(case
when tobusnumber = 1 then frombusnumber
when frombusnumber = 1 then tobusnumber
end )as busnum
from transformer where tobusnumber = 1 or frombusnumber = 1;
如果删除where子句,则会获得空值。 您应该提供表格结构以便更好地理解。