SQL内部联接和

SQL内部联接和,sql,Sql,我在SQL查询中遇到一些问题 SELECT s.searchword AS searchword, s.id AS id, COUNT( c.id ) AS searchresult, s.region AS region FROM search_words AS s INNER JOIN company_data AS c ON c.text LIKE CONCAT( '%', s.searchword, '%' )

我在SQL查询中遇到一些问题

SELECT 
    s.searchword AS searchword, 
    s.id AS id, 
    COUNT( c.id ) AS searchresult, 
    s.region AS region 

    FROM search_words AS s 

    INNER JOIN company_data AS c ON 
    c.text LIKE CONCAT(  '%', s.searchword,  '%' ) 

    AND c.region = s.region 

    GROUP BY 1 ORDER BY s.date DESC
结果

[{“searchword”:“批发”,“searchid”:“416”,“搜索结果”:“31”,“地区”:“斯德哥尔摩”},{“searchword”:“业务”,“searchid”:“329”,“搜索结果”:“1”,“地区”:“斯德哥尔摩”},{“searchword”:“医院”,“searchid”:“330”,“搜索结果”:“1”,“地区”:“斯德哥尔摩”},{“交通”,“searchid”:“337”,“搜索结果”:“4”,“地区”:“斯德哥尔摩”}{“搜索词”:“电子”、“搜索ID”:“334”、“搜索结果”:“4”、“地区”:“斯德哥尔摩”}、{“搜索词”:“汽车”、“搜索ID”:“338”、“搜索结果”:“3”、“地区”:“斯德哥尔摩”}、{“搜索词”:“食品”、“搜索ID”:“340”、“搜索结果”:“11”、“地区”:“斯德哥尔摩”}、{“搜索词”:“零售”、“搜索ID”:“342”、“搜索结果”:“8”、“地区”:“斯德哥尔摩”}、{“搜索词”:“租赁”searchid:“343”,“searchresult:“1”,“region:“stockholm”}]

这里的问题是…区域列中所有区域的值都为空。 我也需要收集这些…正如你所看到的,它只收集斯德哥尔摩

所以我在想类似于

    SELECT 
    s.searchword AS searchword, 
    s.id AS id, 
    COUNT( c.id ) AS searchresult, 
    s.region AS region 

    FROM search_words AS s 

    INNER JOIN company_data AS c ON 
    c.text LIKE CONCAT(  '%', s.searchword,  '%' ) 

    AND c.region = s.region OR s.region = '' 

    GROUP BY 1 ORDER BY s.date DESC
但它不起作用:(

空”值“,或
null
s,在SQL中不是实值-它们是缺少的值,需要由
is
运算符显式处理。此外,
的优先级高于
,因此处理
区域的所有条件都应放在括号中:

SELECT 
    s.searchword AS searchword, 
    s.id AS id, 
    COUNT( c.id ) AS searchresult, 
    s.region AS region 
FROM search_words AS s 
INNER JOIN company_data AS c ON 
           c.text LIKE CONCAT(  '%', s.searchword,  '%' ) AND
           (c.region = s.region OR s.region IS NULL)
GROUP BY 1 ORDER BY s.date DESC

如果您的区域可以是
NULL
'
(空值),则这是检查的防弹方法:

COALESCE(s.region, '') = ''

这样,在与空字符串进行比较之前,您可以将
NULL
替换为
'

根据目前提供的信息,您可能需要继续尝试

SELECT 
    s.searchword AS searchword, 
    s.id AS id, 
    COUNT( c.id ) AS searchresult, 
    IFNULL(s.region, 'all') AS region 
    FROM search_words AS s 
    INNER JOIN company_data AS c
      ON IFNULL(s.region, 'all') = IFNULL(c.region, 'all')
      AND c.text LIKE CONCAT(  '%', s.searchword,  '%' ) 
    GROUP BY 1, 2, 4
    ORDER BY s.date DESC
;
查看它的实际操作:


如果需要调整/进一步详细信息,请发表意见。特别是,请随时调整SQL FIDLE(并提供到更新版本的链接)。

“不起作用”在任何数据库管理系统中都不是有效的错误消息。错误到底是什么?您使用哪种数据库管理系统?Postgres?Oracle?包括不符合
JOIN
标准的记录,通常是使用
OUTER JOIN
s而不是
internal JOIN
s来完成的。您能否提供表结构和样本数据预期输出?您使用的是哪个数据库系统的哪个版本?a_horse,对不起,我不知道什么是DBMS,这是php,我使用mysql。对不起,也许我应该在mysql中添加这个问题。abecee,我一点都不擅长连接。如果没有其他人可以帮助我,也许我会添加更多信息。