gpt4 book ai didi

mysql - 从评估其中一个结果的表中加入

转载 作者:太空宇宙 更新时间:2023-11-03 11:33:01 24 4
gpt4 key购买 nike

我要连接三个表,其中一个具有一对多的值。

SQLFIDDLE

CREATE TABLE Table1  (`id` int, `name` varchar(3));

INSERT INTO Table1 (`id`, `name`)
VALUES (1, 'A'), (2, 'B'), (3, 'C');


CREATE TABLE Table2 (`id` int, `status` int, `date` varchar(9));

INSERT INTO Table2 (`id`, `status`, `date`)
VALUES (1, 1, '''.11..'''), (1, 2, '''.12..'''), (1, 3, '''.13..'''),
(2, 3, '''.23..'''), (3, 1, '''.31..'''), (3, 3, '''.33..''')
;


CREATE TABLE Table3 (`id` int, `value` int);

INSERT INTO Table3 (`id`, `value`)
VALUES (1, 34), (2, 22), (3, 17);

查询 1:

select * from table1

| id | name |
|----|------|
| 1 | A |
| 2 | B |
| 3 | C |

查询 2:

select * from table2;

| id | status | date |
|----|--------|---------|
| 1 | 1 | '.11..' |
| 1 | 2 | '.12..' |
| 1 | 3 | '.13..' |
| 2 | 3 | '.23..' |
| 3 | 1 | '.31..' |
| 3 | 3 | '.33..' |

查询 3:

select * from table3

| id | value |
|----|-------|
| 1 | 34 |
| 2 | 22 |
| 3 | 17 |

我需要为每个 id 返回的查询:

   TABLE1.name, TABLE2.status, TABLE2.date, TABLE3.value

在这种情况下:

  • 如果 TABLE2.status =1 存在则只返回 TABLE2 的那一行
  • 否则,如果 TABLE2.status =1 不存在,则查找 status =2 并仅返回 TABLE2 的那一行
  • 如果 TABLE2 中不存在这些值中的任何一个,则从结果中跳过该 id

编辑:TABLE2 有一个用于 id,status 的唯一键,所以只能有一个 id=1 status=1

感谢您的帮助!

最佳答案

可能是这样的:

select table1.id, table1.name,
coalesce(table2_status1.status, table2_status2.status) as status,
coalesce(table2_status1.date, table2_status2.date) as date,
table3.value
from table1
left join table2 table2_status1 on table2_status1.id = table1.id and table2_status1.status = 1
left join table2 table2_status2 on table2_status2.id = table1.id and table2_status2.status = 2
join table3 on table3.id = table1.id
where (table2_status1.id is not null or table2_status2.id is not null);

关于mysql - 从评估其中一个结果的表中加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48234895/

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