2014-08-09 7 views
1

У меня есть две таблицы userprofile и deviceid.SQL-запрос для получения непревзойденных записей из двух таблиц

  • userprofile содержит столбцы username, studentname
  • deviceid содержит столбцы username, device id

Я хочу получать имя пользователя записей из userprofile, которые не находятся в deviceid (username).

Мой запрос

SELECT 
    userprofile.username, userprofile.studentname 
FROM 
    userprofile 
LEFT JOIN 
    deviceid ON deviceid.username = userprofile.username 
WHERE 
    deviceid.username IS NULL; 

Это не извлечение каких-либо значений.

+0

Вы можете показать образцы данных? – Jens

ответ

0

Вы почти близко к решению

SELECT userprofile.username,userprofile.studentname FROM userprofile 
    LEFT OUTER JOIN deviceid ON deviceid.username = userprofile.username 
    WHERE deviceid.username IS NULL; 
UNOIN ALL 
SELECT userprofile.username,userprofile.studentname FROM deviceid 
    LEFT OUTER JOIN userprofile ON deviceid.username = userprofile.username 
    WHERE deviceid.username IS NULL; 

для другого типа решения Попробуйте Fiddle

Надеются, что это может полезно

+0

Это намного сложнее, чем необходимо. –

1

Ваша формулировка фактически точный путь:

Я хочу получить записи имени пользователя из пользовательского файла, которые не находятся в deviceid (u sername)

Теперь нам нужно просто поместить это, чтобы SQL:

SELECT username 
FROM userprofile 
WHERE username NOT IN (SELECT username FROM deviceid) 
1

Это, как я обычно делаю это

select * from userprofile a where not exists (select 1 from device b where a.username = b.username) 
0

В запросе, вы фильтрации на левая объединенная таблица в вашем предложении where. Это изменяет левое соединение на внутреннее соединение. Чтобы использовать ваш подход, выполните свою фильтрацию в предложении join. В вашем конкретном случае все, что вам нужно сделать, это изменить слово «где» на «и».

Ответ Mureinik также будет работать, но может быть медленным. Ответ Ганса Килиана также будет работать.

0

вам нужно получить значение в UserProfile попробуйте следующий код

select username,studentname 
from userprofile 
where upper(username) not in (select upper(username) from deviceid); 

выше запрос находится в Oracle .Это будет возвращаете деталь userprifile, которые не находятся в DeviceID

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