首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL -单行中的多个值

MySQL -单行中的多个值
EN

Stack Overflow用户
提问于 2017-11-02 15:21:30
回答 1查看 1.1K关注 0票数 1

我有以下表格:

表用户:

代码语言:javascript
复制
id_user | name | job
--------|------|----
1       | John | Director
2       | Lila | Assistant
3       | Paul | Director
4       | Jude | Assistant

表址:

代码语言:javascript
复制
id_site | city 
--------|-------
110     | Paris 
111     | London 

表格联系人:

代码语言:javascript
复制
id_user | id_site | is_assistant | is_director
--------|---------|--------------|------------
1       | 110     | NULL         | 1
2       | 110     | 1            | NULL
3       | 111     | NULL         | 1
4       | 111     | 1            | NULL

让我解释一下。我在表用户中有公司的不同用户;在表站点中有公司的不同位置,最后有一个将表用户与表站点联系起来的表格联系人。

以下是我的疑问:

代码语言:javascript
复制
SELECT 
site.*,
`assistant`.`job` AS "Assistant Job",`assistant`.`name` AS "Assistant name", 
`directors`.`job` AS "Job director",`directors`.`name` AS "Director name"
FROM `site`
LEFT OUTER JOIN contact ON contact.id_site = site.id_site                   
LEFT OUTER JOIN `users` AS assistant ON `contact`.`id_user` = `assistant`.`id_user` AND `contact`.`is_assistant` = "1"
LEFT OUTER JOIN `users` AS directors ON `contact`.`id_user` = `directors`.`id_user` AND `contact`.`is_director` = "1"
ORDER BY site.id_site

这个查询很好,但问题是我的结果如下:

代码语言:javascript
复制
id_site | city   | Assistant Job | Assistant name | Job director | Director name
--------|--------|---------------|----------------|--------------|-------------- 
110     | Paris  | NULL          | NULL           | Director     | John
110     | Paris  | Assistant     | Lila           | NULL         | NULL
111     | London | NULL          | NULL           | Director     | Paul
111     | London | Assistant     | Jude           | NULL         | NULL

我希望拥有同一行的所有信息,而不是有两个几乎相同的行。我想要的是:

代码语言:javascript
复制
id_site | city   | Assistant Job | Assistant name | Job director | Director name
--------|--------|---------------|----------------|--------------|-------------- 
110     | Paris  | Assistant     | Lila           | Director     | John
111     | London | Assistant     | Jude           | Director     | Paul

希望我说的够清楚了。你能帮帮我吗?

非常感谢。

斯特菲

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-02 16:42:46

如果将两个contact it放在同一行中,则应该可以工作。问题在于,因为它要连接到两行,并连接到拆分的行。因此,如果您两次加入contact表( is_directoris_assistant的第二个子句),那么每个表应该只有一个结果。然后加入到各自的users表中。

代码语言:javascript
复制
SELECT 
    site.*,
    `assistant`.`job` AS "Assistant Job",
    `assistant`.`name` AS "Assistant name", 
    `directors`.`job` AS "Job director",
    `directors`.`name` AS "Director name"
FROM 
    `site`
LEFT OUTER JOIN 
    `contact` AS ContactAssistant
    ON ContactAssistant.id_site = site.id_site 
    AND ContactAssistant.is_assistant = "1"   -- Add this clause here
LEFT OUTER JOIN 
    `contact` AS ContactDirector
    ON ContactDirector.id_site = site.id_site 
    AND ContactDirector.is_director = "1"     -- Add this clause here             
LEFT OUTER JOIN 
    `users` AS assistant 
    ON ContactAssistant.`id_user` = `assistant`.`id_user` 
    -- AND `contact`.`is_assistant` = "1" -- No longer needed
LEFT OUTER JOIN 
     `users` AS directors 
     ON ContactDirector.`id_user` = `directors`.`id_user` 
     -- AND `contact`.`is_director` = "1" -- No longer needed
ORDER BY site.id_site

不相关,您的is_assistantis_director字段是(TINY)INT还是VARCHAR?我假设它们是数字的,所以你可能想确定你是这样对待它们的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47078834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档