Как выбрать строки из двух таблиц, которые отличаются в одном поле? - PullRequest
1 голос
/ 13 июля 2011

Извините за вопрос базы данных начального уровня, но я действительно хочу выучить это.

У меня есть две таблицы customer_change и customer_full, и я хочу выбрать строки из customer_full того же клиента (тот же customer_id), но с разными customer_points.

Я написал следующий запрос:

SELECT * 
FROM customer_change a,customer_full b 
WHERE 
    a.ID = b.ID AND 
    a.CUSTOMER_POINTS != b.CUSTOMER_POINTS

Теперь это работает. Но он будет возвращать строки в обеих таблицах. Как изменить запрос, чтобы он возвращал только строки во второй таблице?

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

Могут ли эксперты предложить некоторую помощь? Спасибо!

Ответы [ 2 ]

5 голосов
/ 13 июля 2011

Оператор неравенства SQL - <>, а не !=. (Извинения: я отмечаю, что != поддерживается, по крайней мере, в некоторых реализациях! Как уже отмечалось в комментариях к вопросу, это, похоже, проблема с набором символов. Однако я остаюсь в стороне от своего ответа. :))

Тем не менее, я рекомендую узнать о синтаксисе JOIN , а не объединять таблицы, используя критерии WHERE. Первый из них поддается более читаемым запросам и позволяет лучше контролировать объединение таблиц.

Например, ваш запрос выше будет:

SELECT * 
FROM customer_change a
JOIN customer_full b ON a.ID = b.ID AND a.CUSTOMER_POINTS <> b.CUSTOMER_POINTS
3 голосов
/ 13 июля 2011

* выберет все, что является результатом перекрестного произведения всех таблиц в вашем запросе. Вы можете «выбрать» определенные столбцы, указав их имя в предложении SELECT, например:

SELECT customer_points 
FROM customer_change

Или вы можете выбрать только столбцы из определенной таблицы (или нескольких таблиц), добавив имя таблицы в начало имени столбца, за которым следует точка. Такие как:

SELECT customer_change.customer_points, customer_full.ID
FROM customer_change, customer_full

В вашем случае вы можете выбрать ТОЛЬКО записи во второй таблице:

SELECT b.* 
FROM customer_change a,customer_full b 
WHERE 
    a.ID = b.ID AND 
    a.CUSTOMER_POINTS != b.CUSTOMER_POINTS

Оба <> и != являются приемлемыми "не равно" операторы .

Если вы хотите использовать JOIN s, тогда вы можете сделать:

SELECT b.* 
FROM customer_change a
JOIN customer_full b ON a.ID = b.ID AND a.CUSTOMER_POINTS != b.CUSTOMER_POINTS
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...