2013-10-25 2 views
0

У меня есть список элементов в таблице MySQL, каждый из которых имеет номер группы & уникальный номер позиции.MYSQL Выбрать с IF в том, где статья

Я пытаюсь выбрать записи, которые соответствуют критериям 2.

Сначала мне нужно выбрать запись, которая удовлетворяет группе & номера позиций. Если ни один не найден, я хочу, чтобы выбранные записи принадлежали только группе.

Только одна запись должна быть выбрана в любом случае.

+2

Непонятно, что вы ищете. Пожалуйста, разместите некоторые образцы данных, нужный результат и ваш запрошенный запрос. – Barmar

+0

В общем, вы не используете 'IF' в предложениях WHERE', вы используете логические операторы' AND' и 'OR'. – Barmar

+0

Величина группы, которую вы проверяете во второй части, совпадает с значением, которое вы будете использовать при первой проверке с идентификатором элемента? например, «дайте мне записи где (groupid = 1 и itemid = 123)», если никакая запись не найдена, «дайте мне запись (где groupid = 1)», если это так, вы можете просто выполнить вторую вторую проверку. если у вас нет какой-либо индикации в результирующем наборе, который указывает, какие условия соответствуют этой записи, первая или вторая –

ответ

1
SELECT * 
FROM YourTable 
WHERE GroupID = :group 
ORDER BY ItemID = :item DESC 
LIMIT 1 

LIMIT 1 делает его возвращать только одну запись. Предложение ORDER BY делает предпочтительной запись, которая соответствует критериям элемента, если таковая имеется.

+0

Отлично, это то, что мне нужно, спасибо – AnKing

+0

На самом деле я просто понял, что это не сработает в моей ситуации. Позвольте мне объяснить, что у меня здесь. Мне нужно выбрать список скидок для моего клиента, у которых будет группа продуктов, номер группы и скидка. Скажите, что группа продуктов имеет 20% скидку, но в этой группе скидка 25% мне нужно только выбрать этот предмет. если номер элемента не указан, выберите группу. Таким образом, на выходе будет список групп и элементов, но не более 1 в каждой группе. – AnKing

+0

Может быть лучше, если бы вы задали новый вопрос. Пожалуйста, разместите образцы данных, желаемые результаты и ваше попытку решения (если вы опустите последнее, оно, вероятно, будет приостановлено - запросы на код должны начинаться с вашей попытки и почему это не работает). – Barmar

0

Попробуйте

это не будет работать

Select * From MyTable 
Where (GroupID = 1 and ItemID = 2) or (GroupID = 1) 

это работает

IF EXISTS (SELECT 1 FROM MyTable WHERE GroupID = 1 AND ItemID = 2) 
    BEGIN 
     SELECT TOP 1 * FROM MyTable WHERE GroupID = 1 AND ItemID = 2 
    END 
ELSE 
    BEGIN 
     SELECT TOP 1 * FROM MyTable WHERE GroupID = 1 
    END 
  • заменить MyTable с именем Вашего стола
  • заменить GroupID и ItemID с имя ваших столбцов
  • заменить номер 1 и 2 с в зависимости от того значения ассоциироваться с колоннами вы хотите фильтровать
+0

. Предложение WHERE эквивалентно 'WHERE GroupID = 1'. Не нужно упоминать «ItemID». – Barmar

+0

Можете ли вы уточнить? – NKD

+0

Я забыл ограничить его до 1 записи. – NKD

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