gpt4 book ai didi

php - 如何将子查询的所有结果包含到 SELECT 语句中?

转载 作者:行者123 更新时间:2023-11-29 10:36:22 25 4
gpt4 key购买 nike

我想将子查询的结果包含到我的 SELECT 语句中,但我不知道如何使用 SQL 语句来做到这一点。当子查询返回一个结果时,我的语句似乎工作正常,但当它返回多于一行时,它就成为一个问题。下面是我的 SQL 语句的结构:

function get_client ($client_ec_no){
include 'connection.php';

$sql = 'SELECT cs.*,
(SELECT ss.s_name
FROM ss, mcs
WHERE mcs.mcs_s_id = ss.s_id
AND mcs.mcs_client_ec_no = ?)

FROM cs, ss, mcs
WHERE cs.client_ec_no = ?';

try {
$results = $db->prepare($sql);
$results->bindValue(1, $client_ec_no, PDO::PARAM_STR);
$results->bindValue(2, $client_ec_no, PDO::PARAM_STR);
$results->execute();
} catch (Exception $e) {
echo "Error!: " . $e->getMessage() . "<br />";
return false;
}
return $results->fetch();
}

我收到错误:

Error!: SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row

最佳答案

您可以JOIN它,而不是在SELECT中使用它:

SELECT cs.*, t.*
FROM cs, ss, mcs
INNER JOIN
(
SELECT ss.s_name, ss.s_id
FROM ss, mcs
WHERE mcs.mcs_s_id = ss.s_id
AND mcs.mcs_client_ec_no = ?
) AS t ON ss.s_id = t.s_id AND mcs.mcs_s_id = t.mcs_s_id
WHERE cs.client_ec_no = ?

请注意,表 FROM cs, ss, mcs 将是 CROSS JOIN,因为您没有提供联接条件。您应该添加连接条件,我建议使用以下语法:

SELECT cs.*, t.*
FROM cs
INNER JOIN ss ON ...
INNER JOIN mcs ON ...
INNER JOIN
(
SELECT ss.s_name, ss.s_id
FROM ss, mcs
WHERE mcs.mcs_s_id = ss.s_id
AND mcs.mcs_client_ec_no = ?
) AS t ON ss.s_id = t.s_id AND mcs.mcs_s_id = t.mcs_s_id
WHERE cs.client_ec_no = ?

关于php - 如何将子查询的所有结果包含到 SELECT 语句中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46358309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com