【问题标题】:Inner join table in case condition MySql案例条件MySql中的内部连接表
【发布时间】:2019-01-25 04:55:59
【问题描述】:

我有一个场景,我想在满足条件时对表进行内部连接。我想要类似的东西

SELECT * FROM table_1 
CASE 
    WHEN some_condition THEN INNER JOIN table_2 ON some_other_condition
END

我已经阅读了许多参考资料和以前的 StackOverflow 答案。但是,那些不符合我的要求。

编辑:

Table 1
id  |  name  |  price
1   |  aaa   |  111
2   |  bbb   |  222
____________________

Table 2
id  |  discountedPrice  |  orgId
1  |   100          |        org1
2  |   200          |        org2

添加了表格。对于某些组织,我想显示唯一的价格。但是,一些用户有价格折扣。所以,想向少数用户展示折扣。所以,我想有条件地进行内部连接。

【问题讨论】:

  • 能否提供一些示例数据
  • 对此类查询使用动态 sql
  • @fa06,你想要什么数据。
  • @MuhammadWaheed,我不想使用动态查询,因为它容易发生 sql 注入。
  • 另一个选项是 `UNION` 子句,但在知道您对样本数据的确切输出要求后,我会更喜欢这个。

标签: mysql sql case inner-join


【解决方案1】:

使用left join。你不清楚你想实际做什么,但像这样:

select t1.*, coalesce(t2.discounted_price, ?) as discounted_price
from table_1 t1 left join
     table_2 t2
     on <join conditions> and
        <some condition>;

【讨论】:

  • 在某些情况下我根本不想加入表格。但是在您的解决方案中,您一直在使用某些条件加入,这将在失败条件下给出空结果。问题已更新。请检查一次。谢谢你..
【解决方案2】:

在这种情况下,使用 IF 子句验证条件,然后继续您的 INNER JOIN 查询。

我不确定,什么时候你的条件不匹配。作为一个假人,我简单地放了一个 SELECT

语法

IF expression THEN
   statements;
ELSE
   else-statements;
END IF;

你可以试试下面的

 IF (some_condition to filter org) THEN

 SELECT * FROM table_1 INNER JOIN table_2 ON some_other_condition

 ELSE

 SELECT * FROM table_1 ;

END IF

【讨论】:

  • 提供示例查询以了解您的答案
  • 这是有效的语法吗?
  • 亲爱的朋友,最终我试图按照您的问题语气解释意识形态。现在我也添加了语法。
  • 不要给出笼统的答案,而是用同一个例子来证明它
  • @GaganBurde 已经更新了我的答案。你能查到吗?
猜你喜欢
  • 2014-11-01
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 2018-05-14
  • 2020-03-31
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
相关资源
最近更新 更多