2017-01-03 3 views
0

Надеюсь, кто-то может дать мне руку здесь. У меня есть следующие две таблицы:SQL Inner Join заявление не дает желаемых результатов

Table: locations 
location_id user_id  city  state 
1    1    Los Angeles CA 
2    1    New York NY 
3    1    Chicago  IL 
4    2    Dallas  TX 
5    3    Denver  CO 
6    4    Miami  FL 
7    5    Atlanta  GA 

Table: events 
event_id user_id  event_name event_date 
1   1   My Event 1 2017-02-01 
2   2   My Event 2 2017-03-01 
3   3   My Event 3 2017-04-01 
4   4   My Event 4 2017-05-01 
5   5   My Event 5 2017-06-01 

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

SELECT e.event_id, e.user_id, e.event_name, e.event_date, 
     l.user_id, l.city, l.state 
FROM events e 
INNER JOIN locations l 
ON e.user_id = l.user_id 
ORDER BY e.event_date ASC 

Я пытаюсь просто получить только записи в таблице событий, но и тянуть соответствующий город и штат которые совпадают с user_id, которые имеют обе таблицы. Выход должен быть:

event_id user_id  event_name event_date city   state 
1   1   My Event 1 2017-02-01 Los Angeles CA 
2   2   My Event 2 2017-03-01 Dallas  TX 
3   3   My Event 3 2017-04-01 Denver  CO 
4   4   My Event 4 2017-05-01 Miami   FL 
5   5   My Event 5 2017-06-01 Atlanta  GA 

Может ли кто-нибудь указать мне на мою ошибку в инструкции SQL?

+1

В каком месте для user_id = 1? Почему Лос-Анджелес в результате, почему не в Нью-Йорке? – Pred

+0

Просто нужно первое, и пропустите остальные, которые соответствуют user_id – mck

+0

Определить сначала (по данным) – Pred

ответ

1

Вы никогда не давали нам логики для принятия решения которое место для выбора для данного пользователя. Один из подходов будут принимать минимальные location_id, связанные с данным пользователем:

SELECT t1.*, 
     COALESCE(t2.city, 'NA'), 
     COALESCE(t2.state, 'NA') 
FROM events t1 
LEFT JOIN locations t2 
    ON t1.user_id = t2.user_id 
INNER JOIN 
(
    SELECT user_id, MIN(location_id) AS min_location_id 
    FROM locations 
    GROUP BY user_id 
) t3 
    ON t2.user_id = t3.user_id AND 
     t2.location_id = t3.min_location_id 
1

Это совершенно невозможно, здесь проблема для пользователя с идентификатором 1 у вас есть 3 кортежей в locations таблицы, какой город, чтобы выбрать это большой вопрос.

1    1    Los Angeles CA 
2    1    New York NY 
3    1    Chicago  IL 
+0

Я понимаю все проблемы, конечно. Я должен был быть более ясным. Поскольку нет никакого способа узнать, мне нужно убедиться, что я получаю ТОЛЬКО первый экземпляр соответствия, а не дополнительные экземпляры. Таким образом, в этом случае, для user_id 1, он вытащил бы из Лос-Анджелеса CA. Извините, я работаю со структурой, созданной мной еще несколько лет назад :-(. – mck

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