【问题标题】:Get a value even if one condition is false即使一个条件为假也能得到一个值
【发布时间】:2012-11-11 00:57:18
【问题描述】:

这是我的实际查询:

SELECT temp.id_company AS id_company
     , temp.code_product AS id_product
     , temp.date_product  AS date_p
FROM (
   SELECT *
   FROM companies 
   INNER JOIN products
      ON products.id_company_product = companies.id_company
   WHERE module_key_company = "daL/RqzZcfqc."
   ) AS temp
WHERE temp.code_product = "app_12"

首先我得到companies.id_company where companies.module_key_company 匹配“dal.....”然后我检查是否匹配products.code_product = "app_12"products.id_company = companies.id_company 我在第一次测试后得到。

如果这两个条件都成立,我得到我想要的。但如果products.code_product 不匹配,我也想获得company.id_company。

即使code_product 错误,我也无法找到仅通过module_key 测试才能获得id_company 的方法。

感谢您的帮助。

【问题讨论】:

  • 听起来好像你想要一个左或右outer join,这样仍然会输出Company 表中在Products 中缺少匹配项的行。
  • 我不明白...你的意思是只用两个条件做一个 SELECT 但只用 LEFT 加入而不是 INNER ?
  • Wikipedia article关于外连接。本质上,即使无法满足​​连接的 ON 条件,其中一张表仍会输出其所有信息,而输出的某些行可能包含不匹配条件的 NULL 值。
  • 好的,我想我明白了,它对我不起作用。因为我确信我会在 module_key 上得到匹配,所以得到一个 id_company。但在某些情况下,我无法匹配得到的 id_company 上的 code_product。对不起,如果我暴露得很糟糕,我需要睡觉......

标签: sql where exists


【解决方案1】:

试试这个:

SELECT companies.id_company
     , coalese(products.code_product,'NONE') as id_product
     , products.date_product as date_p
FROM companies 
LEFT OUTER JOIN products
   ON     products.id_company_product = companies.id_company
      and products.code_product = 'app_12'

WHERE companies.module_key_company = 'daL/RqzZcfqc.'

id_product 列将包含文本 NONE,对于没有任何匹配产品的公司,date_p 列将为 null。此外,您应该使用单引号来提供字符常量,而不是双引号。

【讨论】:

  • 好吧,它工作得很好,我不知道可以将这种条件放在 ON 子句中......非常感谢。
【解决方案2】:

很难说出你的表结构是什么,除非你用表名作为列名的后缀。所以这就是我的猜测。试试这个:

SELECT C.id_company, P.code_product, P.date_product
  FROM Companies AS C
    LEFT OUTER JOIN Products AS P ON P.id_company_product = C.id_company
  WHERE module_key_company = 'daL/RqzZcfqc.'
    AND (P.code_product = 'app_12' OR P.code_product is NULL) 

最好, 乔

【讨论】:

    猜你喜欢
    • 2017-09-17
    • 2012-11-07
    • 2019-04-05
    • 2022-09-30
    • 2014-01-05
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多