PHP mySQL - выберите уникальное значение, которое не используется, из таблицы dirrefent

Обновления: см. ниже

у меня есть таблица: данные

+-----------------------+--------------+-----------+
| State                 | d_country    | d_postcode|
+-----------------------+--------------+-----------+
| State1                | Country1     |      1111 | 
| State2                | Country2     |      2222 | 
| State3                | Country3     |      3333 | 
| State4                | Country4     |      4444 | 
+-----------------------+--------------+-----------+

И еще одна таблица: пользователь

+-----------------------+--------------+-----------+
| Name                  | u_country    | u_postcode|
+-----------------------+--------------+-----------+
| Name1                 | Country3     |      3333 | 
| Name2                 | Country5     |      5555 | 
| Name3                 |              |      6666 | 
| Name4                 | Country6     |      6666 | 
| Name5                 | Country6     |      6666 | 
+-----------------------+--------------+-----------+

Какой SQL мне следует использовать, чтобы:

Определите количество (количество) стран, которые не указаны в данных таблицы. Например, u_postcode не указан в d_postcode, это 5555 и 6666. Он вернет 2.

Перечислите название и страну, которая еще не указана в табличных данных.

Обновления

  1. Я хочу использовать группировку для фильтрации почтового индекса и сделать Name3 и Name4 разными строками.

Например:

    +-----------------------+--------------+-----------+
    | Name                  | u_country    | u_postcode|
    +-----------------------+--------------+-----------+ 
    | Name2                 | Country5     |      5555 | 
    | Name3                 |              |      6666 |
    | Name4                 | Country6     |      6666 | 
    +-----------------------+--------------+-----------+

Любая возможная идея?

Примечания: исправил сам

SELECT DISTINCT Name, u_country, u_postcode FROM user 
WHERE u_postcode NOT IN (SELECT d_postcode FROM data) 

person apis17    schedule 19.05.2010    source источник
comment
Это домашнее задание? Похоже на вопрос домашнего задания   -  person Cetra    schedule 19.05.2010
comment
нет, это не домашнее задание. но любой, кто хочет сделать это домашним заданием, тоже может. :). Я знаю трудный путь, но хочу использовать для этого простейший запрос, например 2-10 строк. как JOIN, IN inner JOIN, но не знаю, как это сделать. еще исследования. и не нашел :(   -  person apis17    schedule 19.05.2010
comment
у меня есть это: stackoverflow.com/questions/150610/ и это: stackoverflow.com/questions/190702/, связанных с моей проблемой. это близко, но я еще не знаю.   -  person apis17    schedule 19.05.2010
comment
обновления: я хочу, чтобы Name3 и Name4 были уникальными значениями.   -  person apis17    schedule 19.05.2010


Ответы (1)


Попробуй это.

SELECT Name, u_country, u_postcode FROM user 
WHERE u_postcode NOT IN (SELECT d_postcode FROM data)

Надеюсь, поможет

person FlyingCat    schedule 19.05.2010
comment
@jerry: могу ли я использовать другой подзапрос или И НЕ СУЩЕСТВУЕТ? Боюсь, что у IN будут проблемы с производительностью. любая идея? - person apis17; 19.05.2010
comment
если я поставлю GROUP BY u_postcode, u_country для имени 3 будет пустым. как отобразить Name3 и Name4 как уникальные? - person apis17; 19.05.2010
comment
ок, nvm, я решил уникальную проблему с помощью команды SELECT DISTINCT. Спасибо вам всем. - person apis17; 19.05.2010