如何使用内在或联合组合2个选择语句

发布于 2025-02-04 07:23:43 字数 2826 浏览 5 评论 0原文

I have a table named user and vaccine like below

user

user_idfirst_dosesecond_dose
A221HMN03PF88
C221GSV05AZ51

vaccine

vaccine_idvaccine_name
MN03Moderna
SV05Sputnik V
PF88Pfizer
AZ51Astrazeneca
SN12Sinopharm
CNV7Convidecia

我想为第一用户实现的目标是下面的

dose1_namedose2_name
modernapfizer

这是我采用的第一个方法(仅使用1个内部加入),

SELECT vaccine_name AS dose1_name, vaccine_name AS dose2_name FROM vaccine INNER JOIN user ON first_dose = vaccine.vaccine_id WHERE user.user_id = 'A221H' 

一样的输出

但它给出了像dose1_name dose1_namedose2_name
ModernaModerna

,我采用的第二种方法是我采用的第二种方法),

SELECT vac_name AS dose1_name, vac_name AS dose2_name FROM vaccine INNER JOIN user fd ON fd.first_dose = vaccine.vaccines_id INNER JOIN user sd ON sd.second_dose = vaccine.vaccines_id  WHERE fd.user_id = 'A221H' AND sd.user_id = 'A221H'

没有输出

dose1_namedose2_name--
但它将不胜

感激。

I have a table named user and vaccine like below

user

user_idfirst_dosesecond_dose
A221HMN03PF88
C221GSV05AZ51

vaccine

vaccine_idvaccine_name
MN03Moderna
SV05Sputnik V
PF88Pfizer
AZ51Astrazeneca
SN12Sinopharm
CNV7Convidecia

What i want to achieve for 1st user is like below

dose1_namedose2_name
ModernaPfizer

Here is the 1st approach i took (using only 1 INNER JOIN)

SELECT vaccine_name AS dose1_name, vaccine_name AS dose2_name FROM vaccine INNER JOIN user ON first_dose = vaccine.vaccine_id WHERE user.user_id = 'A221H' 

But it gives output like this

dose1_namedose2_name
ModernaModerna

The 2nd approach i took (using INNER JOIN 2 times)

SELECT vac_name AS dose1_name, vac_name AS dose2_name FROM vaccine INNER JOIN user fd ON fd.first_dose = vaccine.vaccines_id INNER JOIN user sd ON sd.second_dose = vaccine.vaccines_id  WHERE fd.user_id = 'A221H' AND sd.user_id = 'A221H'

But it gives no output

dose1_namedose2_name
--

Any help will be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

征﹌骨岁月お 2025-02-11 07:23:43

您的第二种方法的第二种方法是正确的,但是作为对您提到的帖子的评论,它应该是用户表,然后2个将加入到疫苗表上

:例如:

SELECT vac1.vaccine_name as dose1_name, vac2.vaccine_name as dose2_name
FROM user
LEFT JOIN vaccine as vac1 ON user.first_dose = vac1.vaccine_id
LEFT JOIN vaccine as vac2 ON user.second_dose = vac2.vaccine_id
WHERE user.user_id = 'XXXX'

Your second approach of 2 joins is correct, however as a comment on your post mentioned, it should be the users table and then 2 left joins to the vaccine tables

For example:

SELECT vac1.vaccine_name as dose1_name, vac2.vaccine_name as dose2_name
FROM user
LEFT JOIN vaccine as vac1 ON user.first_dose = vac1.vaccine_id
LEFT JOIN vaccine as vac2 ON user.second_dose = vac2.vaccine_id
WHERE user.user_id = 'XXXX'
柒夜笙歌凉 2025-02-11 07:23:43

一种替代方法是使用相关的子查询进行所需的加入:

select User_Id,
    (select vaccine_name from vaccine v where v.vaccine_id = u.first_dose) as dose1_name,
    (select vaccine_name from vaccine v where v.vaccine_id = u.second_dose) as dose2_name
from user u;

如果两种剂量并不总是填充,则可能需要 cocce

An alternative is to use a correlated subquery for each required join:

select User_Id,
    (select vaccine_name from vaccine v where v.vaccine_id = u.first_dose) as dose1_name,
    (select vaccine_name from vaccine v where v.vaccine_id = u.second_dose) as dose2_name
from user u;

you may also need to coalesce the columns if both doses are not always populated.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文