2013-12-16 3 views
-3

Прежде всего, это немного сложно объяснить.Запрос MySQL, возвращающий неизвестные значения

У меня проблемы с одним CONCAT. Следующий запрос возвращает значения «Locale», которых нет в таблице.

SELECT client.description, client.name, loc.description 
FROM clients AS client 
LEFT JOIN FromWhere AS from ON from.id = client.id_from 
LEFT JOIN locale AS loc ON loc.id = from.id_loc 
client.description LIKE CONCAT('%', ?, '%') 
AND IFNULL(client.name, '') LIKE CONCAT('%', ?, '%') 
AND IFNULL(loc.description, '') LIKE CONCAT('%', ?, '%') 
GROUP BY client.id 
ORDER BY client.id DESC 

Моя таблица воспроизводит следующее (ВЕРНО):

-description-------name----------locale 
------------------------------------------- 
Dude...   Testing   Paris 
No stop   Another   null 
Representing null   null 
stackover  OneMore   London 

С кодом MySQL выше, если бы я изменить то, что я хочу, я получил эти странные результаты:

SELECT client.description, client.name, loc.description 
FROM clients AS client 
LEFT JOIN FromWhere AS from ON from.id = client.id_from 
LEFT JOIN locale AS loc ON loc.id = from.id_loc 
client.description LIKE CONCAT('%', 'stackover', '%') 
AND IFNULL(client.name, '') LIKE CONCAT('%', 'OneMore', '%') 
AND IFNULL(loc.description, '') LIKE CONCAT('%', 'OK', '%') 
GROUP BY client.id 
ORDER BY client.id DESC 



    -description-------name----------locale 
    ------------------------------------------- 
    stackover  OneMore   OK 

As вы видите, что «Locale» -> OK не существует. Это происходит с несколькими значениями ... и я не могу понять связь между ними.

Любые идеи?

+2

Вы должны поместить обратные ссылки вокруг псевдонима 'from', поскольку это ключевое слово. Вам также не хватает логического оператора (или возможно ГДЕ) между 'ON loc.id = from.id_loc' и' client.description LIKE CONCAT ('%', 'stackover', '%') ' – AgRizzo

+0

У меня есть второй оператор. Переходим сюда и адаптируем, чтобы вы, ребята, могли понять, я как-то забыл об этом. – user3065191

ответ

1

Я не уверен, где проблема

Я воссоздал свои таблицы в следующем SQL Fiddle, и, кажется, работает хорошо вещи.

Прокомментировать/раскомментировать фильтр по описанию местоположения и проверить его.

http://sqlfiddle.com/#!2/8f6a4c/8

Можете ли вы обновить скрипку с конкретным сценарием, в случае, если это не является удовлетворительным.

+0

Проблема показа вас в том, что у меня много записей (потому что она соединяется с таблицей, в которой есть почтовые индексы ..) Хотя я думаю, что я сделал одну и ту же ошибку на SQLFiddle. http://sqlfiddle.com/#!2/8d18b/9 Я попытался адаптироваться, чтобы вы могли понять +/- таблицы, которые у меня есть, и поля. – user3065191

+0

Btw, если я удалю «GROUP BY» из моего исходного кода, я получаю тысячи дубликатов, которые не существуют с одним и тем же идентификатором! – user3065191

+1

Вы неправильно используете GROUP BY. Причина, по которой у вас есть дубликаты записей, - это то, что у вас одинаковый id_town, используемый для разных городов. См. Http://sqlfiddle.com/#!2/fbc94d/1. –

Смежные вопросы