【问题标题】:SQL inner joins vs LIKE does not return rowsSQL 内连接与 LIKE 不返回行
【发布时间】:2014-07-12 03:17:15
【问题描述】:

有没有人可以解释为什么我的查询不起作用?

SELECT country.Country、city.City、location.Adress、museuminfo.Phone、museuminfo.Mail、museuminfo.Homepage、museum.MuseumName、museum.Description、museum.Collections、photo.PhotoRef 来自国家 INNER JOIN城市 ON country.CountryCode=city.CountryCode 内部连接位置 ON city.CityId = location.CityId INNER JOIN 博物馆信息 ON location.LocationId = 博物馆信息.LocationId INNER JOIN 博物馆 ON 博物馆信息.MuseumInfoId = 博物馆.MuseumInfoId 内连接照片 ON 博物馆信息.MuseumInfoId = 照片.MuseumInfoId 在哪里 (博物馆名称 LIKE '%classic%') 或(描述 LIKE '%classic%') 或(像“%classic%”这样的集合) AND 博物馆.LanguageCode = 'EN'

我有一个可以正常工作的缩短版本,但您一次只能搜索一个表:

选择 * 从博物馆 WHERE (MuseumName LIKE '%classic%') 或(描述 LIKE '%classic%') 或(像“%classic%”这样的集合) AND 博物馆.LanguageCode = 'EN'

请帮帮我:-(

【问题讨论】:

  • 查询应该做什么?
  • INNER JOIN 为两边的匹配行生成行。如果任何连接条件都没有匹配的行,那么您将不会得到任何结果。尝试使用OUTER JOINLEFT JOIN
  • 当你有一个不工作的缩短版本时回来,你可以解释你正在尝试做什么以及出了什么问题。
  • 也许你需要括号。 (...OR ...OR...) AND ...
  • 它确实对用户其他连接而不是内部连接起作用。谢谢!

标签: mysql inner-join sql-like


【解决方案1】:

除非您提供一些示例数据并告知查询实际试图实现的目标,否则不能绝对确定...但请尝试更改您的 WHERE 条件,如下所示

WHERE 
(museum.MuseumName LIKE '%classic%' 
OR museum.Description LIKE '%classic%'
OR museum.Collections LIKE '%classic%')
AND museum.LanguageCode = 'EN'

(或)

WHERE museum.LanguageCode = 'EN'
AND 
(museum.MuseumName LIKE '%classic%' 
OR museum.Description LIKE '%classic%'
OR museum.Collections LIKE '%classic%')

【讨论】:

  • 是的,抱歉,该查询用于通过最初生成此查询的搜索来获取博物馆。正如我所说,我有缩短的版本,因为(我的猜测)它只抓取一张桌子,而没有我认为把它弄乱的所有连接。遗憾的是,您编写的替代代码也不起作用。我看到有些人提到使用外部-og 左连接。但我不认为我完全理解它们,所以我想我要研究一下!不过谢谢你的回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 2023-02-25
相关资源
最近更新 更多