【问题标题】:MySQL: If a column value is 2 THEN do X ELSE do YMySQL:如果列值为 2 那么做 X ELSE 做 Y
【发布时间】:2015-07-27 12:21:25
【问题描述】:

我现在正在处理的数据库有些混乱。我有三个潜在的表,我想加入,但在某些情况下它可能只有两个表。 我们将它们称为 table1、table2 和 table3。

table1 有一个名为“type”的字段。如果table1.type 为2,那么我只需要加入table3。 对于我想加入 table2 和 table3 的任何其他值。

我怎样才能在一个 SQL 查询中实现这一点,而不是:1)用一个查询来选择类型。 2) 做一个 PHP foreach-loop 来检查当前迭代的类型和 3) 根据类型值执行一个新的查询。

编辑: 我会尽量具体一点。

table1 有一个名为“pid”的列,它引用了整个其他表,但这对于这个问题来说是多余的。我尝试使用 UNION 和 LEFT JOIN 来解决问题,但无法实现我想要的。

我想从我的数据库中选择“pid”值为“100”的所有结果。这给了我四行作为回报,其中 2 行的类型值为“2”,其他的为“1”。

所以基本上我想要实现的就是以下两条SQL语句合二为一:

(如果“类型”是“2”)

SELECT *
FROM table1 t1
INNER JOIN table3 t3
ON t1.id = t3.t1_id
WHERE t1.pid = 100

(如果“类型”不是“2”)

SELECT *
FROM table1 t1
INNER JOIN table2 t2
ON t1.id = t2.t1_id
INNER JOIN table3 t3
ON t2.id = t3.t2_id
WHERE t1.pid = 100

我猜我可以使用 UNION 语句来做到这一点,但我对如何实现 WHERE t1.pid = '100' 部分感到困惑。

【问题讨论】:

  • 如果您可以提供一个简单的示例数据库作为 SQL 供回答者使用,那将会很有帮助。
  • 到目前为止,在 mysql 中,您无法像问题中提到的那样进行条件连接。
  • 您可以使用两个 SQL 语句的 UNION
  • 您可以使用这样的选择语句:stackoverflow.com/questions/9749986/…
  • 检查调整后的答案

标签: php mysql if-statement


【解决方案1】:

使用 UNION 例如

SELECT t1.*, t3.*
   FROM table1 t1
   INNER JOIN table3 t3  ON t1.id = t3.t1_id
   WHERE t1.pid = 100 and t1.type = 2
UNION
SELECT t1.*, t3.*
   FROM table1 t1
   INNER JOIN table2 t2
   ON t1.id = t2.t1_id
   INNER JOIN table3 t3 ON t2.id = t3.t2_id
   WHERE t1.pid = 100 and t1.type <> 2;

但最好明确命名要返回的列。

【讨论】:

  • 也许这可能是我的问题的解决方案。我更新了我的帖子,更详细地解释了我的问题。
  • 我根据您更新的帖子更改了选择语句。
  • 谢谢,正是我想要的!我目前正在通过测试,到目前为止它似乎对您的代码进行了微小的调整。根据我的问题,底部的 SELECT 应该有 t1.type 2,而上面的 t1.type = 2。
猜你喜欢
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 2012-02-15
  • 2011-07-01
  • 2020-05-07
相关资源
最近更新 更多