一次从 3 个表中查询 MySQL

标签 mysql

我尝试一次从 3 个表中获取数据,表是:

  • 候选人
  • 语言
  • candidates_language

其中每一个都代表我数据库中所有用户的一些数据。

顾名思义,第一个表包含一些常规数据,例如:名字、姓氏、电子邮件。

candidates
        ------------------------------------------------------------------------
        |   id   |     firstname    |      surname       |        email        |
        ------------------------------------------------------------------------
        |   22   |      John        |        Doe         |    john@doe.com     |
        ------------------------------------------------------------------------
        |   23   |      Peter       |       Miller       |    doe@john.com     |
        ------------------------------------------------------------------------

第二个只包含 languages_id 和 languageName

languages
    ---------------------------------
    | languageID |     languageName |
    ---------------------------------
    |      1     |      English     |
    ---------------------------------
    |      2     |      German      |
    ---------------------------------
    |      3     |      Spanish     |
    ---------------------------------

最后一个尝试将所有这些联系在一起:

    candidates_language 
   (foreign keys: candidates_id to table candidates,languageID to languages)
        -----------------------------------------------------------------
        |   id   |   candidates_id  |  languageID |        skill        |
        -----------------------------------------------------------------
        |   1    |        22        |       1     |        basic        |
        -----------------------------------------------------------------
        |   2    |        22        |       3     |        basic        |
        -----------------------------------------------------------------
        |   3    |        23        |       1     |        advance      |
        -----------------------------------------------------------------
        |   4    |        23        |       2     |        basic        |
        -----------------------------------------------------------------

我需要将这 3 个表的结果连接到某些特定语言,并制作如下内容:

---------------------------------------------------------------------------
| id |   firstname  |    surname     |      email      | english | german |
---------------------------------------------------------------------------
| 22 |    John      |      Doe       |  john@doe.com   |  basic  |    -   |
---------------------------------------------------------------------------
| 23 |    Peter     |     Miller     |  doe@john.com   | advance |  basic |
---------------------------------------------------------------------------

我尝试用下面的代码连接到这一点:

SELECT
    candidates.firstname,
    candidates.surname,
    candidates_language.candidates_id,
    candidates_language.skill,
    languages.languageID
FROM
    candidates,
    candidates_language,
    languages

不幸的是,我离我想要的实际结果还很远。有人可以帮我解决这个问题吗?

最佳答案

如果语言数量是预定义,那么您可以使用条件聚合来获得所需的结果集:

SELECT c.id, c.firstname, c.surname, c.email,
       MAX(CASE WHEN cl.languageID = 1 THEN cl.skill ELSE '-' END) AS 'English',
       MAX(CASE WHEN cl.languageID = 2 THEN cl.skill ELSE '-' END) AS 'German',
       MAX(CASE WHEN cl.languageID = 3 THEN cl.skill ELSE '-' END) AS 'Spanish'
FROM candidates AS c
LEFT JOIN candidates_language AS cl ON c.id = cl.candidates_id
GROUP BY c.id, c.firstname, c.surname, c.email

Demo Here

否则你必须雇用dynamic sql .

关于一次从 3 个表中查询 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30444568/

相关文章:

python - 如何安装 pyodbc 64 位?

mysql - SQL - 如何选择 "Next Max"记录

Mysql 查询来计算名称的出现次数,其中它们可能有尾随字符?

php - 指定 MySQL 加入

mysql - 无法在 WAMP 服务器上的 WordPress 本地主机中选择数据库错误

php - 在 mysql row php 中使用 urlencode

mysql主从主从复制

mysql - 什么是删除旧记录的更快方法

php - 复杂的 SQL 查询 - 热门内容

PHP 错误 "T_ENCAPSED_AND_WHITESPACE, expecting T_STRING"