Как я могу сопоставить (mysql) строки одним полем, а также другим полем, которое не совпадает - PullRequest
0 голосов
/ 15 мая 2011

Допустим, у меня есть таблица MySQL с 4 полями:

ID | ONE | TWO | THREE

Мне нужно сделать запрос, который в конечном итоге покажет две строки. Мне нужно поле "ОДИН", чтобы соответствовать. Оба говорят «виджет».

Тогда поле 'TWO' в одной строке должно совпадать с 'MFG', а другое должно быть чем угодно, кроме 'MFG'. Например:

ID | ONE | TWO | THREE
-----------------------
1  | WID | MFG | sthg
2  | WID | STR | stes

ОК, может быть, это поможет ..

Это утверждение, которое я имею до сих пор.

SELECT * 
FROM cs_coupons 
WHERE brand='Zantac'
  AND product='Heartburn Relief 24ct +'
  AND type='MFG'

 UNION 

SELECT * 
FROM cs_coupons 
WHERE brand='Zantac'
  AND product='Heartburn Relief 24ct +'
  AND type != 'MFG'

Что мне нужно сделать, так это перебрать все строки, проверяя каждую марку на соответствие.

Ответы [ 2 ]

2 голосов
/ 15 мая 2011
((SELECT * FROM mytable WHERE ONE='WID' AND TWO='MFG' LIMIT 1)
UNION
(SELECT * FROM mytable WHERE ONE='WID' AND TWO != 'MFG' LIMIT 1) );

первый запрос возвращает одну запись с WIG & MFG, второй запрос возвращает одну запись с WIG &! MFG.Вот, пожалуйста.

Но я думаю, что, скорее всего, вы неправильно истолковали схему.Вы не будете уверены, какая запись будет выбрана, если в WIG & MFG более одной записи.

0 голосов
/ 15 мая 2011

Может быть, что-то вроде этого:

SELECT *
FROM cs_coupons
WHERE ID IN (
  SELECT MIN(ID) AS ID
  FROM cs_coupons 
  WHERE type='MFG'
  GROUP BY brand, product

  UNION ALL

  SELECT (MIN(ID) AS ID
  FROM cs_coupons 
  WHERE type != 'MFG'
  GROUP BY brand, product
) x
ORDER BY brand, product, type = 'MFG' DESC

?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...