gpt4 book ai didi

MySQL - 在 LEFT 连接表中选择 WHERE

转载 作者:行者123 更新时间:2023-11-29 04:19:11 25 4
gpt4 key购买 nike

我正在从 3 个表格、案例、计算和位置中进行选择。从位置我需要用一个参数来划分结果,它是 repairmethod。下面的代码看起来不错,实际上它也显示了我的结果,但没有这个修复方法过滤器。

当前代码和文本结果如下:

 SELECT c.vin, c.case_id, c.axrmrs_id, c.date_created, 
cl.totalcosts, cl.laborhours, cl.calculationdate, cl.laborcosts,
group_concat(DISTINCT po.text) as text
FROM axnmrs_cases AS c
LEFT JOIN axnmrs_calculations as cl on c.case_id = cl.case_id
LEFT JOIN axnmrs_positions as po on c.case_id = po.case_id
WHERE c.vin='U5YFF24128L064909'
GROUP BY c.vin, c.case_id, c.axrmrs_id

结果(仅包含文本部分)

        -------------------------------
| id | text |
-------------------------------
| 2 | text1,text2,text3 |
-------------------------------
| 3 | text4,text5,text6 |
-------------------------------

它应该是什么样子:

    --------------------------------------------------
| id | textA | textB |
--------------------------------------------------
| 22 | tex1, text2 | text3 |
--------------------------------------------------
| 23 | text5 | text4 |
--------------------------------------------------

textA = SELECT text FROM axnmrs_positions WHERE repairmethod LIKE 'L%'
textB = SELECT text FROM axnmrs_positions WHERE repairmethod LIKE 'E%'

我尝试过类似的方法,但是我无法让它工作:

MAX(CASE WHEN po.repairmethod = E THEN po.text) AS 'E'

有人可以帮我解决这个问题吗?

编辑: fiddle 链接:http://sqlfiddle.com/#!9/a76e9/3

最佳答案

你可以这样做:

SELECT ...
, ...
, GROUP_CONCAT(DISTINCT IF(po.repairmethod LIKE 'L%',po.text,NULL) ORDER BY 1) AS textA
, GROUP_CONCAT(DISTINCT IF(po.repairmethod LIKE 'E%',po.text,NULL) ORDER BY 1) AS textB
, ...

IF 表达式中的第一个参数被评估为 bool 值,如果为真,则返回第二个参数,否则返回第三个参数。 GROUP_CONCAT 将忽略 NULL 值。我还在 GROUP_CONCAT 中包含了一个 ORDER BY 以使返回更具确定性。

如果您熟悉 ANSI SQL:IF 函数本质上是 CASE 表达式的简写。例如,这个:

  IF(a,b,c)

相当于:

  CASE WHEN a THEN b ELSE c END

所以这样:

  IF(po.repairmethod LIKE 'E%',po.text,NULL)

相当于:

  CASE WHEN po.repairmethod LIKE 'E%' THEN po.text ELSE NULL END

(如果需要,CASE 表达式允许我们省略 ELSE NULL。)

关于MySQL - 在 LEFT 连接表中选择 WHERE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30644970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com