【问题标题】:Query: Join, Concat, but getting Results查询:加入、连接,但得到结果
【发布时间】:2017-04-02 11:51:06
【问题描述】:

您好,

我在这里遇到了问题。我正在研究一个搜索选项。我可以搜索名字、姓氏、公司名称和车牌。我只想显示左侧以及客户信息,这是我通过以下查询获得的。但是,当客户没有车牌时,不会显示客户。有没有办法防止这种情况发生?

SELECT DISTINCT A.* 
FROM adressen AS A 
OUTER JOIN fahrzeuge AS F 
ON F.fa_kunden_id = A.ad_id 
WHERE CONCAT(coalesce(A.ad_name), coalesce(A.ad_vorname),coalesce(A.ad_firma), coalesce(F.fa_kennzeichen)) LIKE '%"+wndHauptfenster.textfield_suche.Text+"%' 

我也尝试过使用 IFNULL,但是,这将导致“无结果”,即使对于有汽车的客户也是如此:

SELECT DISTINCT A.* 
FROM adressen AS A 
OUTER JOIN fahrzeuge AS F 
ON F.fa_kunden_id = A.ad_id 
WHERE CONCAT(coalesce(A.ad_name), coalesce(A.ad_vorname),coalesce(A.ad_firma), coalesce(ifnull(F.fa_kennzeichen, 'leer'))) LIKE '%"+wndHauptfenster.textfield_suche.Text+"%'

更新:尝试给定解决方案后,它根本找不到任何东西。

SELECT DISTINCT A.* 
FROM adressen AS A 
OUTER JOIN fahrzeuge AS F 
ON F.fa_kunden_id = A.ad_id 
WHERE CONCAT(coalesce(A.ad_name, ''), coalesce(A.ad_vorname, ''),coalesce(A.ad_firma, ''), coalesce(F.fa_kennzeichen, '')) LIKE '%"+wndHauptfenster.textfield_suche.Text+"%'

Adressen 的专栏:

  • ad_vorname 包含 Max
  • ad_name 包含 Mustermann
  • ad_firma 包含 Testfirma Inc
  • fa_kennzeichen 不包含任何内容。查询正在搜索的行不存在。

【问题讨论】:

  • 是fa_kennzeichen 车牌号吗?
  • 是的。那是车牌号。
  • 一些示例数据可能会有所帮助,包括未返回的记录示例。
  • 您使用了 coalesce(A.ad_firma) ,如果 A.ad_firma 为空,它仍将返回 NULL。因此,它似乎没有做任何有用的事情。将其更改为 coalesce(A.ad_firma, '') ,以将 NULL 交换为空字符串。这样做你不需要 IFNULL 子句
  • 我仍然看不到您在哪里使用了 KickStart 建议的关键字 LEFT。这个查询也是通过 PHP 传递的还是什么?我看不出字符串 %"+wndHauptfenster.textfield_suche.Text+"% 可能会如何匹配我假设您想要 .text 的 VALUE。

标签: mysql sql null


【解决方案1】:

怎么样:

SELECT DISTINCT A.* 
FROM adressen AS A 
OUTER JOIN fahrzeuge AS F 
ON F.fa_kunden_id = A.ad_id 
WHERE CONCAT(coalesce(A.ad_name,''), coalesce(A.ad_vorname,''),coalesce(A.ad_firma,''), coalesce(F.fa_kennzeichen,'')) LIKE '%"+wndHauptfenster.textfield_suche.Text+"%'

【讨论】:

    【解决方案2】:

    OUTER JOIN 是语法错误。应为 LEFT OUTER JOIN,或简写为 LEFT JOIN。

    SELECT DISTINCT A.* 
    FROM adressen AS A 
    LEFT OUTER JOIN fahrzeuge AS F 
    ON F.fa_kunden_id = A.ad_id 
    WHERE CONCAT(coalesce(A.ad_name, ''), coalesce(A.ad_vorname, ''),coalesce(A.ad_firma, ''), coalesce(F.fa_kennzeichen, '')) LIKE '%"+wndHauptfenster.textfield_suche.Text+"%'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 2013-12-14
      • 2019-09-27
      相关资源
      最近更新 更多