为什么这个SQL语句不起作用?

时间:2009-01-14 20:06:28

标签: sql inner-join

SELECT * FROM table1, table2
WHERE table1.user_id = table2.id
AND table1.content = news
AND table1.content_id = 1

那不行。你在sql语句中有两个“AND”吗?

//托梅克

6 个答案:

答案 0 :(得分:11)

你可能想把'新闻'称为字符串...... 你也可能想要使用内连接(效率更高)

SELECT * FROM table1
INNER JOIN table2 ON table1.user_id = table2.id 
WHERE table1.content = 'news' 
AND table1.content_id = 1

答案 1 :(得分:4)

news是什么?某种参数?该领域的价值?应该在现场发生的一个词?很可能您的语法错误,请参阅W3Schools WHEREW3Schools AND/OR运算符页面以获取更多信息。

答案 2 :(得分:3)

让我用JOIN语句为你改写,因为它不再是1995年,你还需要引用新闻

SELECT * FROM table1 t1
inner join table2 t2 on t1.user_id = t2.id
AND t1.content = 'news'
AND t1.content_id = 1

答案 3 :(得分:1)

  • table1和table2是什么样的?你可以粘贴创建脚本吗?
  • 强烈建议使用正确的JOIN语法:

    从table1中选择* table1.user_id = table2.id上的内连接table2 ......

  • 什么数据类型是“table1.content”?

在SQL查询中,你肯定可以拥有的不只是2个AND语句 - 任何真正支持任何SQL-xx标准的数据库都会支持这个......

答案 4 :(得分:1)

首先让我们开始摆脱旧式连接,以便明确分离连接和where子句,以便更容易理解。

SELECT * FROM table1 t1.
JOIN table2 t2
ON t1.user_id = t2.id
WHERE t1.content = news
AND t1.content_id = 1

现在让我们讨论问题所在。首先你收到什么错误,因为这可能是完全可以接受的语法?问题可能是你没有注意到哪个表新闻来自哪里?如果它在两个表中,您可能会在那里收到错误。如果新闻意味着列的价值,那么您希望它是“新闻”而不是新闻。也可能只是没有记录符合您的条件。

此外,使用select *是一种不好的做法,它永远不应该在连接中使用,因为您至少返回一个字段两次,这会浪费数据库和网络资源。始终只指定所需的列。每当懒惰程序员在每个查询中执行此操作时,这每天都会浪费大量资源。

答案 5 :(得分:0)

我喜欢cmartin的回复。此外,如果需要,您可以使用多个AND。