在两个表之间如何选择一个特定值的id存在的表mysql(复制)

时间:2016-05-09 07:01:41

标签: mysql sql database

我之前已经问过这个问题: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提供了答案。

3 个答案:

答案 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