我之前已经问过这个问题:Between two tables how does one SELECT the table where the id of a specific value exists mysql但是我觉得我没有说得好。
我的“徒步旅行”数据库中有2个表,我们可以说表1称为“森林”,表2称为“山”。这两个表都有一个FOREIGN KEY
“Trip_id”,它是表格“Trip”中的PRIMARY KEY
(或其他东西,这是一个组成的示例),即AUTO_INCREMENT
。旅行可以是Mountain或Forest,因此2个表不共享任何Trip_ids。它们每个都有一个不与另一个表共享的属性。山有一个属性“温度”,森林有一个属性“大气”。我想要做的是提取“温度”或“大气”,具体取决于山脉或森林包含Trip_id值74.
SELECT Temperature FROM Mountain WHERE Trip_id = 74 OR
SELECT Atmosphere FROM Forest WHERE Trip_id = 74;
(我知道上面的代码不起作用)。
我最终使用Java解决了这个问题:
String sqlStatement = "SELECT Trip_id FROM Mountains WHERE Trip_id = 74";
if (/*(execute sql statement) == null*/){
//Use Forest (and Atmosphere)
}
else{
//Use Mountain (and Temperature)
}
但是mysql中没有if语句,所以我想知道是否可以使用mysql解决这个问题。
我的想法是这样的:SELECT * FROM FOREST OR MOUNTAIN WHERE Trip_id = 74 EXISTS;
(我知道这段代码是垃圾,完全错了,但我希望它有助于说明我的目标)。
P.S如果列相同,那么这将是最好的答案:
select m.*
from mountains m
where m.trip_id = 74
union all
select f.*
from forests f
where f.trip_id = 74;
感谢Gordon Linoff提供了答案。
答案 0 :(得分:4)
mysql中有if语句。无论如何!
你可以这样做:
SELECT Temperature as Value FROM Mountain WHERE Trip_id = 74
Union All
SELECT Atmosphere as Value FROM Forest WHERE Trip_id = 74
答案 1 :(得分:0)
您可以在查询下方使用。
Select
T.TripID,
M.Temperature,
F.Atmosphere
From
Trip T
LEFT OUTER JOIN Mountain M
ON T.TripID = M.TripID
LEFT OUTER JOIN Forest F
ON T.TripID = F.TripID
Where T.TripID = 74
因此,在上述查询中,如果Mountain和Forest表都有此ID,则会显示Temp和Atmosphere。 如果Mountain OR Forest表中有此ID,则会显示Temp OR Atmosphere。
答案 2 :(得分:0)
在我看来,有两种方法可以解决这个问题 1:您可以强制用户告诉其森林旅行或山地旅行。它只需要点击一下,然后在查询中发送一个额外的arugment,对于Forest发送'F',为Mountain发送'M'。 喜欢
CASE @lv_option
WHEN 'F' THEN
SELECT Atmosphere FROM [FOREST]
ELSE
SELECT Temperature FROM [MOUNTAIN]
END as weather
2:如果您不想更改屏幕视图,可以在接收trip_id的基础上使用if-exists命令。 像
IF EXISTS (SELECT id FROM [FOREST] WHERE trip_id=@lv_trip_id)
BEGIN
SELECT Atmosphere as weather FROM [FOREST] WHERE trip_id=@lv_trip_id
END
ELSE
BEGIN
SELECT Temperature as weather FROM [MOUNTAIN] WHERE trip_id=@lv_trip_id
END
END