这是我的查询然后我解释:
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
使用code_product
和company_id
,然后我使用此ID_product
记录在tyds
表中
我想知道的是,该用户是否在表TYDS
中为指定产品创建记录,然后获取他的id_user
和其他一些内容。当找到记录时它会起作用,当然不是TYDS
表中没有记录或对应的时候。
但我想知道的是,如果users.id_user
表中没有记录,我是否可以获得TYDs
。
事实上,即使其他三个条件返回FALSE,也要得到users.key_user
的结果。
我知道上周我问过类似的问题,但即使先前的解决方案我也找不到。
非常感谢你的帮助!
答案 0 :(得分: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'
答案 1 :(得分:0)
将这些条件移入join子句的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”匹配)。
答案 2 :(得分: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 ...