2016-08-03 2 views
0

У меня это заявление:MySQL исключает NULL/пустое совпадение?

SELECT id FROM laptops 
WHERE (hostname = :hostname) 
OR (asset_tag = :asset_tag) 
OR (serial = :serial) LIMIT 1 

По существу я хочу, чтобы проверить, есть не матч на любой из этих трех полей. Проблема в том, что я получаю совпадения там, где их не должно быть, и это заставляет меня думать, что если одно из этих полей пуст как в MySQL, так и в проверенных данных, оно совпадает с флажком. Правильно ли это звучит? Если да, то как я могу исключить пустые значения из этого процесса сопоставления?

+0

По пустым, вы имеете в виду 'NULL' или пустую строку? Значение «NULL» приведет к сбою сравнений, поэтому ничего не будет возвращено. –

+0

@Gordon Linoff Я сравниваю с пустыми строками. – daninthemix

ответ

0

ОК, довольно простой ответ, как это получается:

SELECT id FROM laptops 
WHERE (hostname = :hostname && hostname != '') 
OR (asset_tag = :asset_tag && asset_tag !='') 
OR (serial = :serial && serial != '') LIMIT 1 
0

@Gordon: Я думаю, что он ищет

SELECT id FROM laptops 
WHERE (hostname != :hostname) 
AND (asset_tag != :asset_tag) 
AND (serial != :serial) LIMIT 1 
Смежные вопросы