gpt4 book ai didi

MYSQL查询问题和子查询

转载 作者:行者123 更新时间:2023-11-29 13:57:58 25 4
gpt4 key购买 nike

我正在尝试从product_description 中获取所有内容并从order_product 中获取描述。

事情是,当我在 order_product 中没有结果时,我只是没有得到任何结果。(即使product_description中有东西)

我可能需要一个子查询,但我不知道该怎么做。

任何想法将不胜感激

SELECT *
FROM
" . DB_PREFIX . "product_description
INNER JOIN " . DB_PREFIX . "order_product ON (" . DB_PREFIX . "product_description.product_id = " . DB_PREFIX . "order_product.product_id)
WHERE
order_id = '" . (int)$order_id . "'
AND " . DB_PREFIX . "product_description.language_id = 2")

最佳答案

这是因为 INNER JOIN 的工作原理。内连接将表 A 中的每一行与表 B 中的每一行进行比较,并仅返回符合过滤条件的行。

如果 order_product 中没有任何行,那么匹配将会失败,并且内连接不会返回任何内容。

您想要的是OUTER JOIN。具体来说,您需要一个 LEFT JOIN

试试这个:

SELECT *
FROM
" . DB_PREFIX . "product_description
LEFT JOIN " . DB_PREFIX . "order_product ON (" . DB_PREFIX . "product_description.product_id = " . DB_PREFIX . "order_product.product_id)
WHERE
order_id = '" . (int)$order_id . "'
AND " . DB_PREFIX . "product_description.language_id = 2")

现在会发生的是,您将从product_description 中获取与order_id = $order_id 匹配的所有行。如果 order_product 中没有与 Product_id 匹配的行,则 order_product 中的字段将为 NULL

此外,我会使用别名来清理您的查询。您可以使用 AS 命名表来创建快捷方式,并且您应该只选择您实际想要的列(正如您在描述中所述)

SELECT pd.*, op.description
FROM " . DB_PREFIX . "product_description AS pd
LEFT JOIN " . DB_PREFIX . "order_product as op
ON (pd.product_id = op.product_id)
WHERE
pd.order_id = '" . (int)$order_id . "'
AND pd.language_id = 2

此外,在将变量插入查询时要非常小心,就像使用 $order_id 一样。如果这是用户提交的数据,您可能会遇到一些令人讨厌的意外。

我会使用您用来处理此问题的任何语言和 SQL 库来研究准备好的语句。我会提供示例,但我不知道您使用的是什么语言或 API。

关于MYSQL查询问题和子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15526698/

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