gpt4 book ai didi

mysql - 左外连接的问题

转载 作者:搜寻专家 更新时间:2023-10-30 22:03:50 26 4
gpt4 key购买 nike

我很确定我需要在我的表上进行左外连接,但我不确定这是否 100% 正确或在 mySQL 中编写它们的语法。

我写了这个查询:

select m.mechanic_id, 
m.mechanic_name,
m.city,
m.state,
count(mr.mechanic_id) as num_ratings,
round(avg(mr.quality_id),2) quality_rating
round(avg(mr.friendly_id),2) friendly_rating,
round(avg(mr.professional_id),2) professional_rating
from mechanic m, mechanic_rating mr, rating r
where m.mechanic_id in (1)
and m.mechanic_id = mr.mechanic_id
and mr.quality_id = r.rating_id(+) <-- these cause issues
and mr.friendly_id = r.rating_id(+) <-- these cause issues
and mr.professional_id = r.rating_id(+) <-- these cause issues
group by mechanic_id

(+) 是在 oracle 中进行外连接的一种方法,我不确定如何在此查询中手动写出外连接。我什至不确定我是否将它们放在正确的列中。

我的表结构是这样的

机械表

|mechanic_id|mechanic_name|city|state|zip|
|PK |

评级表

|rating_id|rating  |
|1 |terrible|
|2 |bad |
etc.

Mechanic_Rating 表

|mechanic_rating_id|mechanic_id|quality_id|friendly_id|professional_id|
|unique auto inc |FK |

quality_id、friendly_id 和 professional_id 都应该是评分表中 rating_id 的外键。

如果我从查询中删除 (+),我得到的结果为零,所以我认为问题是我需要进行左外连接。如果您需要更多信息,请告诉我。

最佳答案

您需要学习和使用 ANSI-92 标准语法来执行连接谓词。使用 ANSI-92,您的查询将写为

 select m.mechanic_id,  m.mechanic_name, m.city,
m.state, count(mr.mechanic_id) num_ratings,
round(avg(mr.quality_id),2) quality_rating
round(avg(mr.friendly_id),2) friendly_rating,
round(avg(mr.professional_id),2) professional_rating
from mechanic m
Left Join mechanic_rating mr
On mr.mechanic_id = m.mechanic_id
Left Join rating r
On r.rating_id = mr.quality_id
And r.rating_id = mr.friendly_id
And r.rating_id = mr.friendly_id
where m.mechanic_id in (1)
group by mechanic_id

注意:(1) 指的是什么??您是否试图将此限制为
m.mechanic_id = 1 在哪里?

关于mysql - 左外连接的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5414041/

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