当我从数据库中选择这样的东西时,它会给我一个错误的结果:
SELECT *
FROM Werkwoord_spelling
WHERE tijd = 'tt'
AND soort = 'sw'
AND vorm = 'i'
OR vorm = 'j'
ORDER BY RAND()
LIMIT 20
结果中有一些行:
527 Afgelopen zomer leefde jij al twaalf jaar. vt zw j leven leefde
1346 Stop je nog met kletsen? tt zw j stoppen Stop
你可以看到我在第527行有一个'vt',但我只要求第1346行中有'tt'的行。
我该如何解决这个问题?
Sietsko
答案 0 :(得分:1)
您需要为逻辑组添加括号。 我认为查询是这个
SELECT *
FROM Werkwoord_spelling
WHERE tijd = 'tt'
AND soort = 'sw'
AND (vorm = 'i'OR vorm = 'j')
ORDER BY RAND()
LIMIT 20
答案 1 :(得分:1)
那是因为你的地方有一个or
。
改为:
SELECT * FROM Werkwoord_spelling WHERE tijd = 'tt' AND soort = 'sw' AND (vorm = 'i' OR vorm= 'j' ORDER BY RAND() LIMIT 20)
它工作正常。
答案 2 :(得分:1)
请注意,AND优先于OR,因此您的WHERE条件等同于:
WHERE (tijd = 'tt' AND soort = 'sw' AND vorm = 'i') OR vorm = 'j'
我想它必须是:
WHERE tijd = 'tt' AND soort = 'sw' AND (vorm = 'i' OR vorm = 'j')
所以使用括号。
答案 3 :(得分:1)
使用如下的几个括号重写您的查询:
SELECT * FROM Werkwoord_spelling
WHERE tijd = 'tt' AND soort = 'sw' AND vorm in ('i', 'j')
ORDER BY RAND() LIMIT 20
这样,您告诉数据库在满足所有条件的情况下为您提供记录:
在您的查询中,OR
的位置是个问题。数据库正在检索符合以下所有条件的记录