MySQL语法用于链接来自不同表的两行,它们都有一个公共字段

时间:2014-01-05 12:05:37

标签: mysql sql inner-join

我有一个包含多个表的MySQL数据库,我必须创建一个非常复杂的查询来从这些表中获取我需要的数据,并且我在解决所述查询时遇到了问题。

这些表的设计是这样的(列名已经重命名,这些不是实际的列),

表1     ID,姓名,评级,国家/地区

表2     itemid,textbool1,textbool2

查询需要: -

  • 检查table2.textbool1和table2.textbool2字段是否与输入的字符串匹配(外部提供,通过字符串连接)
  • (请记住id = itemid)
  • 检查名称是否包含输入的字符串
  • 检查评级是否高于某个值
  • 检查国家/地区是否与输入的字符串匹配
  • 返回最多20个table2行的内容,按table1.rating(Descending)
  • 排序

到目前为止,我有: -

SELECT table2.* from table2 INNER JOIN table1 
WHERE table2.textbool1 = 'true' && table2.textbool2 = 'false' 
&& table1.name LIKE 'test' && table1.rating >= '10' && table1.country = 'gb' 
ORDER BY table1.rating DESC LIMIT 20

但这不起作用。任何人都可以解释原因吗?

任何帮助都会得到满足。

修改

此查询有效:SELECT table2.* FROM table2 INNER JOIN table 2 ON(table2.item_id = table1.id) WHERE table1.country= 'de' && premiumservers.Rating >= 9 ORDER BY table1.Rating DESC LIMIT 20

但这不是:SELECT table2.* FROM table2 INNER JOIN tabel1 ON(table2.item_id = table1.id) WHERE table1.Name LIKE 'test' && table1.country = 'de' ORDER BY table1.Rating DESC LIMIT 20

1 个答案:

答案 0 :(得分:1)

您遗漏了ON

中的INNER JOIN声明

试试这个..

SELECT table2.* from 
table2 INNER JOIN table1
ON( table2.itemid = table1.id )
WHERE table2.textbool1 = 'true' && table2.textbool2 = 'false' 
&& table1.name LIKE '%test%' && table1.rating >= '10' && table1.country = 'gb' 
ORDER BY table1.rating DESC LIMIT 20