我有三个表 ( product, product_description, product_store_description)。
产品
这个表只有一行
+----------+---------------------+
|product_id| description |
+----------+---------------------+
| 1 |'regular description'|
+----------+---------------------+
Run Code Online (Sandbox Code Playgroud)
产品描述
此表有零行
+----------+-----------+--------+
|product_id|description|language|
+----------+-----------+--------+
Run Code Online (Sandbox Code Playgroud)
product_store_description
This table has zero rows
+----------+-----------+--------+--------+
|product_id|description|language|store_id|
+----------+-----------+--------+--------+
Run Code Online (Sandbox Code Playgroud)
我想返回.description所有表的列WHERE product.product_id = '1'。
所以在这种情况下,我想要的输出是
$row = $result->fetch_assoc();
echo '<pre>';
var_dump($row);
echo '</pre>';
array (size=3)
'p_description' => string 'regular description' (length=19)
'pd_description' => string '' (length=0)
'psd_description' => string '' (length=0)
Run Code Online (Sandbox Code Playgroud)
我已经尝试了我的 SQL 的许多变体,这就是目前的情况。
SELECT p.description AS p_description ,pd.description AS pd_description, psd.description AS psd_description FROM product AS p
RIGHT JOIN product_description AS pd ON(pd.product_id = p.product_id)
RIGHT JOIN product_store_description AS psd ON(psd.product_id = p.product_id)
WHERE p.product_id = '1'
AND pd.language = 'en'
AND psd.language = 'en' AND psd.store_id = 1;
Run Code Online (Sandbox Code Playgroud)
这将返回零行
我已经搜索了一个导致我使用 a 的答案,RIGHT JOIN但这并没有解决我的问题。
我在此处创建了示例表的 SQL 小提琴,不幸的是,我还没有让任何人回答工作。
小智 5
如果表product包含至少一个数据。并且您想显示其他列NULL或自定义字符串,例如"---"您必须在查询中指定的连接,即使 join 属性为空。因此,以下查询将为您提供数据。
SELECT
p.description AS p_description ,ifnull(pd.description,"---") AS pd_description,
ifnull(psd.description,"--") AS psd_description
FROM product AS p
LEFT JOIN Product_description AS pd ON(pd.product_id = p.product_id)
LEFT JOIN product_store_description AS psd ON(psd.product_id = p.product_id)
WHERE p.product_id = '1' AND (pd.language = 'en' or pd.language is null)
AND (psd.language = 'en' or psd.language is null) AND
(psd.store_id = 1 or psd.store_id is null);
Run Code Online (Sandbox Code Playgroud)