Mysql 具有三个表的Sql左外部联接

Mysql 具有三个表的Sql左外部联接,mysql,sql,Mysql,Sql,我正在开发一个基本的电子商务应用程序。应用程序有两个页面(所有产品和我的篮子),经过身份验证的用户可以将产品添加到自己的篮子中。我有三个表,这些表包含以下数据。我想知道,如果用户将产品添加到自己的购物篮中,这些产品在该用户的“所有产品”页面上不存在 SQL查询应该如何进行?我正在寻找所有产品页面的查询。所以查询的返回类型必须是Product 如果用户在所有产品页面上向自己的购物篮添加了任何产品,则这些产品 不应在此用户的“所有产品”页面上看到 所以,如果经过身份验证的用户id为3。用户应该在自己

我正在开发一个基本的电子商务应用程序。应用程序有两个页面(所有产品和我的篮子),经过身份验证的用户可以将产品添加到自己的篮子中。我有三个表,这些表包含以下数据。我想知道,如果用户将产品添加到自己的购物篮中,这些产品在该用户的“所有产品”页面上不存在

SQL查询应该如何进行?我正在寻找所有产品页面的查询。所以查询的返回类型必须是Product

如果用户在所有产品页面上向自己的购物篮添加了任何产品,则这些产品 不应在此用户的“所有产品”页面上看到

所以,如果经过身份验证的用户id为3。用户应该在自己的“所有产品”页面上看到p2产品。

尝试以下操作:

SELECT product.name
FROM product
LEFT JOIN basket ON basket.fk_product = product.id
WHERE (basket.fk_user != 3 OR basket.fk_user IS NULL)
检查我的

如果需要,您也可以加入
用户
表,但不需要使用您提供的数据

当on子句的计算结果为
true时,
左联接将保留第一个(产品)表中的所有行以及第二个(篮子)表中的所有行

当on子句的计算结果为
false
NULL
时,
左连接仍然会保留第一个表中的所有行,其中第二个表的值为
NULL

或者更常见的是

SELECT p.name
FROM product p
LEFT JOIN basket b 
  on b.fk_product = p.id
AND b.fk_user = 3
WHERE b.fk_user is null

您所描述的内容听起来像是不存在的

SELECT p.name
FROM product p
WHERE NOT EXISTS (SELECT 1
                  FROM basket b
                  WHERE b.fk_product = f.id AND
                        b.fk_user = 3 
                 );

这似乎是对您的问题的最直接的解释。

同时指定预期结果。(也许还需要更多的样本数据。)您在寻找什么查询?是否希望查询返回用户可查看的产品-即产品表中的产品减去用户购物篮中的产品?我在问题购物篮表底部指定了一个示例结果结果结果结果是什么?!?(你说有三个表。)为什么用户的购物篮中有prodX会阻止你在所有产品中仍然显示prodX?或者干脆
。。。在basket.fk_product=product.id和basket.fk_user!=3
@jarlh-Um,我觉得这听起来不太对——但话说回来,被接受的answer@Strawberry哎呀。我唯一的目的是简化查询,而不是回答问题。@jarlh好的,没什么大不了的,但你没有简化查询。您提供了一个不同的查询—一个生成不同结果的查询—只是说'
SELECT p.name
FROM product p
WHERE NOT EXISTS (SELECT 1
                  FROM basket b
                  WHERE b.fk_product = f.id AND
                        b.fk_user = 3 
                 );