Автор Тема: Великий и могучий SELECT или не могу сделать выборку  (Прочитано 4313 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ActiveX

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 46
  • +0/-0
  • 0
    • Просмотр профиля
Есть две таблицы в одной базе MySQL:
одна T1, поля:

Order_ID INT(11) auto_increment NOT NULL (PRIMARY KEY)
Order_Price INT(11)

вторая T2, поля:

Customer_ID
Order_ID
Customer_Price

Как выбрать все (уникальные) Order_ID`ы из таблицы T1, которых нет у определенного Customer_ID`a из таблицы T2? Обычный SQL-запрос типа «SELECT DISTINCT(T1.Order_ID) FROM T1, T2 WHERE T1.Order_ID!=T2.Order_ID AND Customer_ID=$id» не помогают...
Всех людей можно разделить на три группы: тех, кто умеет считать, и тех, кто не умеет.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
в общем случае, если надо найти записи, которых нет во второй таблице, то надо делать через LEFT JOIN
Посмотри там пример.
По твоему вопросу примерно так делать надо (ИМХО) :

SELECT DISTINCT T1.Order_ID FROM T1
LEFT JOIN T2 ON T1.Order_ID = T2.Order_ID
WHERE T2.Customer_ID = $id AND T2.Order_ID IS NULL
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн ActiveX

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 46
  • +0/-0
  • 0
    • Просмотр профиля
Yaaaahhhhhhhhhhhooooooooooooo!
Спаисбо за  скорый ответ! Сегодня попробовать не смогу все завтра... Поэтому результаты сообщю завтра (вернее уже сегодня, но днем). А ввобще признаю — всегда думал, что JOIN используется только при выборке данных из таблицы, объединенной с самой собой...
Всех людей можно разделить на три группы: тех, кто умеет считать, и тех, кто не умеет.

Оффлайн ActiveX

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 46
  • +0/-0
  • 0
    • Просмотр профиля
А, кстати, Order_ID не может быть “NULL” (IS NOT NULL)
Всех людей можно разделить на три группы: тех, кто умеет считать, и тех, кто не умеет.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Цитировать
ActiveX:
А, кстати, Order_ID не может быть “NULL” (IS NOT NULL)
я так понимаю, ты текст по ссылке не читал ?
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Гость

  • Гость
по-моему так должно работать

SELECT DISTINCT T1.*, T2.* FROM T1
LEFT JOIN T2 ON T1.ORDER_ID = T2.ORDER_ID
WHERE T2.CUSTOMER_ID !=$id OR T2.CUSTOMER_ID IS NULL

Оффлайн ActiveX

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 46
  • +0/-0
  • 0
    • Просмотр профиля
Макс
Доки читал.
Всех людей можно разделить на три группы: тех, кто умеет считать, и тех, кто не умеет.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Цитировать
ActiveX:
Доки читал.

Цитировать
ActiveX:
А, кстати, Order_ID не может быть “NULL” (IS NOT NULL)

в доке написано в каком случае при left join значение поля может быть NULL
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28