1

这是我的查询,然后我解释:

SELECT 
    tyds.product_tyd,
    tyds.user_tyd,
    COALESCE(action_tyd, 'NONE') AS action_tyd 
FROM tyds
INNER JOIN users
    ON tyds.user_tyd = users.id_user
INNER JOIN products
    ON tyds.product_tyd = products.id_product
INNER JOIN companies
    ON products.id_company_product = companies.id_company 
WHERE users.key_user = '14967d378a580cdf020350f4eb626f16'
AND companies.module_key_company = 'daL/RqzZcfqc.'
AND products.cancelled_product >= 0
AND products.code_product = 'app_1'

users.key_user给我 users.id_user 也是tyds.user_tyd. companies.module_key_company给我products.company_id_product

products表中我允许一个ID_product带有 acode_product然后company_id我用它ID_product在我的tyds表中记录

我想知道这个用户是否在表TYDS中为指定的产品制作记录,然后得到他id_user和其他一些东西。它在找到记录时起作用,当然在表中没有记录或对应关系时不起作用TYDS

但我想知道的是,如果表users.id_user中没有记录,我是否可以得到 EVEN TYDs

所以实际上是得到users.key_user即使其他三个条件返回FALSE的结果。

我知道我上周问过类似的问题,但即使有先例的解决方案我也找不到。

非常感谢你的帮助 !

4

3 回答 3

1

从您的描述看来,您更像是想要列出所有用户及其相应的 tyds 记录,即使他们没有任何相关记录。我相信这就是你想要的。

SELECT
    users.id_user,
    tyds.product_tyd,
    tyds.user_tyd,
    COALESCE(action_tyd, 'NONE') AS action_tyd 
FROM users
LEFT JOIN tyds
    ON tyds.user_tyd = users.id_user
LEFT JOIN products
    ON tyds.product_tyd = products.id_product
    AND products.cancelled_product >= 0
    AND products.code_product = 'app_1'
LEFT JOIN companies
    ON products.id_company_product = companies.id_company
    AND companies.module_key_company = 'daL/RqzZcfqc.'
WHERE users.key_user = '14967d378a580cdf020350f4eb626f16'
于 2012-11-19T18:28:29.787 回答
0

将这些条件移动到连接子句的ON条件中:

SELECT 
    tyds.product_tyd,
    tyds.user_tyd,
    COALESCE(action_tyd, 'NONE') AS action_tyd 
FROM tyds
INNER JOIN users
    ON tyds.user_tyd = users.id_user
INNER JOIN products
    ON tyds.product_tyd = products.id_product
    AND products.cancelled_product >= 0 -- moved from where clause to here
    AND products.code_product = 'app_1'-- moved from where clause to here
INNER JOIN companies
    ON products.id_company_product = companies.id_company 
    AND companies.module_key_company = 'daL/RqzZcfqc.' -- moved from where clause to here
WHERE users.key_user = '14967d378a580cdf020350f4eb626f16'

连接条件可能不仅仅包含“id 匹配”。通过在子句中放置特殊条件ON,您可以将返回的行限制为仅以您想要的方式连接的行,但如果它们不这样做,仍然会得到一个空的左连接(即使有其他行具有相同的“id”)匹配)。

于 2012-11-19T18:15:50.433 回答
0

我会链接这样的东西:

SELECT B_user, tyds.product_tyd 
FROM tyds
INNER JOIN products ON tyds.`product_tyd` = products.id_product
AND products.`cancelled_product` >= 0
AND products.code_product = 'app_1'
INNER JOIN companies ON products.`id_company_product` = companies.`id_company`
AND companies.`module_key_company` = 'daL/RqzZcfqc.'
WHERE tyds.`user_tyd` IN 
(SELECT id_user AS B_user FROM users WHERE key_user = '14967d378a580cdf020350f4eb626f16') 

即使 products.code_product 错误等等,也可以获得 B_user ......

于 2012-11-20T09:18:22.803 回答