SQL-запрос не возвращает ожидаемых результатов

0

Здесь SQL-запрос, который я слегка очистил (только имена столбцов/таблиц/баз данных). Я сохранил структуру так же, как и производство. Это запрос, полученный из моего журнала MySQL.

SELECT      master.pk AS pk,
            master.vendor_id AS vendorId,
            master.vendor_text AS vendorName,
            master.device_id AS deviceId,
            master.device_did AS deviceDid,
            master.device_text AS deviceName,
            master.class_id AS classId,
            master.class_text AS className,
            master.oem_id AS oemId,
            master.oem_did AS oemDid,
            master.oem_text AS oemName,
            master.oem_vendor_text AS oemVendor,
            master.comment AS comment,
            master.v1 AS v1,
            master.v2 AS v2,
            master.status AS status,
            dev_mod_join.mod_text AS module
FROM        master
LEFT JOIN   dev_mod_join 
       ON   master.device_did = dev_mod_join.dev_id
WHERE ( 
            master.device_text LIKE CONCAT("%", 'search term', "%")
       OR   master.vendor_text LIKE CONCAT("%", 'search term', "%")
       OR   master.oem_text LIKE CONCAT("%", 'search term', "%")
       OR   master.oem_vendor_text LIKE CONCAT("%", 'search term', "%") 
      )
GROUP BY    master.vendor_text
LIMIT     0, 25

По какой-то причине это возвращает только один результат для каждого поставщика. Это странно. На продавца может быть несколько устройств. Если я ищу поставщика, который, как я знаю, имеет множество устройств, он по-прежнему будет возвращать только одно устройство для этого поставщика (он также возвращает другие устройства с другими поставщиками, но что-то еще соответствует поисковому запросу, но он дает только один поставщик).

Все, что мне не хватает, я думаю, что это имеет какое-то отношение к "OR", но из того, что я знаю, это не должно быть.

Помощь ценится, как всегда.

EDIT: OMG, я, возможно, только что понял. Я использовал GROUP BY вместо ORDER BY.

Ничего себе, смотрел на это некоторое время и вроде 5 минут на SO, и я получаю его

  • 2
    Это предложение GROUP BY будет недопустимым в других вариантах SQL. Я думаю, вы должны попытаться удалить это и сообщить нам.
  • 0
    это действительно то, что есть. благодарю вас.
Теги:

1 ответ

0
Лучший ответ

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

Вот так:

SELECT DISTINCT      
            master.pk AS pk,
            master.vendor_id AS vendorId,
            master.vendor_text AS vendorName,
            master.device_id AS deviceId,
            master.device_did AS deviceDid,
            master.device_text AS deviceName,
            master.class_id AS classId,
            master.class_text AS className,
            master.oem_id AS oemId,
            master.oem_did AS oemDid,
            master.oem_text AS oemName,
            master.oem_vendor_text AS oemVendor,
            master.comment AS comment,
            master.v1 AS v1,
            master.v2 AS v2,
            master.status AS status,
            dev_mod_join.mod_text AS module
FROM        master
LEFT JOIN   dev_mod_join 
       ON   master.device_did = dev_mod_join.dev_id
WHERE ( 
            master.device_text LIKE CONCAT("%", 'search term', "%")
       OR   master.vendor_text LIKE CONCAT("%", 'search term', "%")
       OR   master.oem_text LIKE CONCAT("%", 'search term', "%")
       OR   master.oem_vendor_text LIKE CONCAT("%", 'search term', "%") 
      )
  • 0
    пока не могу принять, но это на все 100%. избавился от GROUP BY, переключился на ORDER BY и добавил DISTINCT. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню