Mysql 子查询的一般混淆

Mysql 子查询的一般混淆,mysql,sql,Mysql,Sql,我有一个表,看起来像这样(示例) 以及第二个表,表2,其中ptid等于第一个表中的id table2 id | ptid | dataz 1 | 1 | 99999 2 | 1 | 848483 3 | 1 | 11111 4 | 2 | 76543 我想返回表2中的所有值,其中t1.id=t2.ptid,而不需要SQL创建一个完整的新行,每个t2都有一个重复的t1记录,就像我在连接中得到的那样 这似乎是一种绝对基本的SQL情况。我试过使用sub-select

我有一个表,看起来像这样(示例)

以及第二个表,表2,其中ptid等于第一个表中的id

table2
id | ptid | dataz
1  | 1    | 99999
2  | 1    | 848483
3  | 1    | 11111
4  | 2    | 76543
我想返回表2中的所有值,其中t1.id=t2.ptid,而不需要SQL创建一个完整的新行,每个t2都有一个重复的t1记录,就像我在连接中得到的那样

这似乎是一种绝对基本的SQL情况。我试过使用sub-select

SELECT t1.id,
(SELECT t2.dataz
FROM table2 AS t2
WHERE t1.id=t2.ptid
)
FROM table1 AS t1
WHERE t1.id IN (1,2)
现在SQL说它返回了不止一行,这就是我想让它做的。但SQL可能不知道如何处理这样返回的多行(一行中可能没有一行)。所以,这显然是行不通的

我希望看到的是,sub-select查询返回一些东西,我可以将其转换为从该sub-select返回的所有值的数组,这样我就可以通过PHP将其传递给javascript并使用它

我过去所做的是为每个子查询生成一个又一个函数,并使用主查询的ID进行查询,然后将子查询结果合并到一个数组中,该数组将被传递并合并到主查询中,以创建我想要的多维数组。这似乎效率低下,我相信有一个更优雅的解决方案来解决这个问题

做这样的事情最有效的方法是什么


我不知道这是否有什么区别,但我在非示例代码中使用了PHP MySQLI和prepared语句。

问题不清楚,但我怀疑这就是您想要的:

SELECT t1.id, GROUP_CONCAT(t2.dataz) AS dataz
FROM table1 AS t1
JOIN table2 AS t2 ON t1.id = t2.ptid
WHERE t1.id in (1, 2)
GROUP BY t1.id
GROUP_CONCAT(t2.dataz)
将创建所有
t2.dataz
值的逗号分隔字符串

id dataz
1  99999,848483,11111
2  76543

你想要得到的结果是什么?我怀疑你想要的是
groupconcat(t2.dataz)
,但问题不是很清楚。
id dataz
1  99999,848483,11111
2  76543