如何在不使用UNION的情况下进行此查询?

时间:2019-12-18 12:36:32

标签: mysql sql database sqlite phpmyadmin

我不太擅长进行查询。那么有人可以为这个查询解释并帮助我吗?

我需要内部联接2个表“ Slaap”和“ Eten”。我需要ID = 5的所有'eten'和我需要ID = 5的所有'Slaap'。我只能通过UNION实现此功能,但这是我不想要的,因为此查询用于进行最新活动,因此我可以使用订单,但因为联盟我不能。

这是我当前的查询:

SELECT e.tijd, e.product_1, e.product_2, e.product_3, s.van, s.tot, s.slaapoptie 
FROM users u 
    LEFT OUTER JOIN eten e on e.user_id = u.id AND e.id = 5 
    LEFT OUTER JOIN slaap s on s.user_id = u.id WHERE u.id = 5 
UNION 
SELECT e.tijd, e.product_1, e.product_2, e.product_3, s.van, s.tot, s.slaapoptie 
FROM users u 
    LEFT OUTER JOIN eten e on e.user_id = u.id 
    LEFT OUTER JOIN slaap s on s.user_id = u.id AND s.id = 5 
    WHERE u.id = 5

结果

query

我希望得到相同的结果,但不使用UNION,所以有人为我解释了这个问题,我该如何实现呢?

3 个答案:

答案 0 :(得分:1)

我认为这可以满足您的要求

SELECT e.tijd, e.product_1, e.product_2, e.product_3, s.van, s.tot, s.slaapoptie 
FROM users u LEFT OUTER JOIN
     eten e 
     ON e.user_id = u.id LEFT JOIN
     slaap s 
     ON s.user_id = u.id AND s.id = u.id
WHERE u.id = 5 AND
      (e.id IS NOT NULL OR s.id IS NOT NULL);

请注意,我将5替换为u.id。我想这是意图。

WHERE中的最终条件只是检查是否至少有一个条件匹配。

答案 1 :(得分:0)

您似乎希望用户拥有eten或slaap。 所以你可以做

SELECT e.tijd, e.product_1, e.product_2, e.product_3, s.van, s.tot, s.slaapoptie 
FROM users u 
LEFT OUTER JOIN eten e on e.user_id = u.id 
LEFT OUTER JOIN slaap s on s.user_id = u.id 
WHERE u.id = 5
and (e.id = 5 or s.id = 5)

答案 2 :(得分:0)

SELECT * FROM( SELECT e.created_eten, e.tijd, e.product_1, e.product_2, e.product_3, s.created_slaap, s.van, s.tot, s.slaapoptie FROM users u LEFT OUTER JOIN eten e on e.user_id = u.id AND e.id = ? LEFT OUTER JOIN slaap s on s.user_id = u.id WHERE u.id = ? UNION SELECT e.created_eten, e.tijd, e.product_1, e.product_2, e.product_3, s.created_slaap, s.van, s.tot, s.slaapoptie FROM users u LEFT OUTER JOIN eten e on e.user_id = u.id LEFT OUTER JOIN slaap s on s.user_id = u.id AND s.id = ? WHERE u.id = ?

这对我有用