【问题标题】:Inner join MYSQL query not working内部连接 ​​MYSQL 查询不起作用
【发布时间】:2013-10-21 09:25:00
【问题描述】:

我有一个包含三个表的表结构:profiles、profile_subrubriek 和 rubrieken。我使用以下查询查询数据:

SELECT profiles.hoofdrubriek, profiles.plaats
, profiles.bedrijfsnaam, profiles.gemeente, profiles.bedrijfsslogan
, profiles.straatnaam, profiles.huisnummer, profiles.postcode
, profiles.telefoonnummer, profiles.fax, profiles.email
, profiles.website, profiles.bedrijfslogo 

FROM profiles INNER JOIN profile_subrubriek ON profiles.ID=profile_subrubriek.profile_id 
INNER JOIN rubrieken ON profile_subrubriek.subrubriek_id=rubrieken.ID  

where (
rubrieken.rubriek = 'Aannemersbedrijven' 
OR 
profiles.hoofdrubriek = 'Aannemersbedrijven') 
AND profiles.gemeente = 'Dongen'

结果,0 行。这是不正确的。如果我取出 Inner Join 并且只在 WHERE clausule 中合并 'hoofdrubriek' 列,结果我得到大约 25 行,这是正确的。所以这个查询(上面的修改版本)确实有效:

SELECT profiles.hoofdrubriek, profiles.plaats, profiles.bedrijfsnaam
, profiles.gemeente, profiles.bedrijfsslogan, profiles.straatnaam
, profiles.huisnummer, profiles.postcode, profiles.telefoonnummer
, profiles.fax, profiles.email, profiles.website, profiles.bedrijfslogo 

FROM profiles where (profiles.hoofdrubriek = 'Aannemersbedrijven') 
AND profiles.gemeente = 'Dongen'

我做错了什么?

谢谢!

【问题讨论】:

  • 将您的查询/代码分成多行 - 它们很难阅读
  • 我建议您检查您的数据。
  • 建议数据没有记录来匹配其他 2 个表中的profiles.hoofdrubriek = 'Aannemersbedrijven'。可能尝试使用左连接来查看返回的结果
  • 这里也一样。您确定您d like to retrieve has profile_subrubriek.profile_id and profile_subrubriek.subrubriek_id. In other words, are the join conditions ok for the data youd 想要获得的每个条目吗?
  • 使用 LEFT JOIN 就是答案!尽管我不太确定为什么..

标签: php mysql sql outer-join


【解决方案1】:

可能连接的表不包含引用值。试试LEFT JOIN 而不是INNER JOIN

【讨论】:

  • 我会将此作为评论,而不是答案。
  • 不同的是,INNER JOIN 只会在另一个表中也有相关记录时才会给出结果。
  • 虽然有一个小问题,但当您在 ​​where 子句中使用外部联接表中的字段进行过滤时,联接实际上变成了内部联接。 rubrieken.rubriek = 'Aannemersbedrijven' 可能会发生这种情况。虽然没有看到修改后的查询,但很难分辨。
【解决方案2】:

使用此查询开始故障排除。

select count(*) records
FROM profiles INNER JOIN profile_subrubriek ON profiles.ID=profile_subrubriek.profile_id 

如果 records 大于 1,添加此行并再次运行:

INNER JOIN rubrieken ON profile_subrubriek.subrubriek_id=rubrieken.ID  

继续逐个添加原始查询的位,直到记录为零。您添加的最后一件事就是原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多