MySQL - 在同一 SQL 的嵌套 SQL 语句中使用 select 字段值

标签 mysql sql

我有以下 SQL 查询

SELECT 
    a.id AS ID, a.title, 
    (
        SELECT Group_Concat( title ) 
        FROM (
            SELECT title
            FROM `table_b` AS b
            JOIN table_c ON c.id = b.id
            WHERE b.id = ID
            UNION 
            SELECT title
            FROM `table_b` AS b
            JOIN table_c ON c.id = b.id
            WHERE b.another_id = ID
    ) AS other_titles 
FROM table_a

但是它不工作并且嵌套 SQL 部分中的部分 WHERE b.id = IDWHERE b.another_id = ID 有问题。

如何在嵌套选择中使用第一个选择中的 ID (SELECT a.id AS ID)?

最佳答案

我想你这里有的叫做相关子查询。它看起来很有前途,似乎只缺少最后几笔(以粗体斜体突出显示):

SELECT
  a.id AS ID,
  a.title, 
  (
    SELECT Group_Concat( title ) 
    FROM (
      SELECT title
      FROM `table_b` AS b
        JOIN table_c ON c.id = b.id
      WHERE b.id = <b><i>a.</i></b>ID
      UNION 
      SELECT title
      FROM `table_b` AS b
        JOIN table_c ON c.id = b.id
      WHERE b.another_id = <b><i>a.</i></b>ID
  ) AS other_titles 
FROM table_a <b><i>AS a</i></b>

请记住,您在子查询中实际引用的是 a.id,而不是 ID 别名。 (你不能在那里引用别名。)

如果 a.id 是一个复杂的表达式,并且您不喜欢在子查询中重复它,那么您可能需要重构整个查询,可能像这样:

SELECT
  x.ID,
  x.title,
  (
    SELECT Group_Concat( title ) 
    FROM (
      SELECT title
      FROM `table_b` AS b
        JOIN table_c ON c.id = b.id
      WHERE b.id = <b>x.ID</b>
      UNION 
      SELECT title
      FROM `table_b` AS b
        JOIN table_c ON c.id = b.id
      WHERE b.another_id = <b>x.ID</b>
  ) AS other_titles 
FROM (
  SELECT
    a.id AS ID,
    a.title,
  FROM table_a AS a
) x

关于MySQL - 在同一 SQL 的嵌套 SQL 语句中使用 select 字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5947732/

相关文章:

php - 如何按点过滤行。 PHP/MySQL

php - 从 json_decode 获取单个元素

sql - 使用有限的数据估算每个标签(或标签组)每月的页面浏览量?

sql - 多列全外连接

用于存储在字符串中的小数的 MySQL Round() 函数

MySQL 服务器启动时出现 PID 错误

php - 在 SELECT 语句中使用括号和 LIMIT 时出现错误 "A non-numeric value encountered"

php - MySQL从按日期排序的两个表中选择

sql - 如何使用 DataGrip 在本地创建 postgreSQL 数据库

sql - 使用 Excel(或 SQL)合并或删除列中的重复值