2013-03-27 2 views
2

У меня есть 3 таблицы, как например:MySQL несколько таблица user_id не существует запрос

User table 
user_id  first_name  email 
1   Bob   [email protected] 
2   Jane   [email protected] 
3   Fred   [email protected] 

Listing 
listing_id user_id  status 
1   1    1 
2   1    1 
3   2    1 
4   3    1 

User billing 
billing_id user_id  status 
1   1    1 
2   2    1 

В таблице пользователь имеет всю информацию о пользователе. В таблице листинга есть информация об аукционе. Столбец состояния этой таблицы должен определить, активен ли список или закончился ли он. Таблица фактурирования содержит информацию, связанную с данными о выставлении счетов пользователям.

Все таблицы связаны на основе user_id. То, что я хотел бы извлечь, - это вся информация пользователя, в которой пользователь имеет активные списки, но не ввел свои платежные данные. Таким образом, желаемый результат приведенного выше примера таблицы будет

user_id  first_name  email 
3   Fred   [email protected] 

Фред в настоящее время имеет активные списки, но еще не заполнил свою платежную информацию.

Большое спасибо.

+0

Я пробовал несколько левых объединений, а некоторые IS NULL, но не дал результаты, которые мне нужны. – puks1978

+0

NOT IN будет работать, но требует больше времени и ресурсов для выполнения, а затем левого соединения. – zgr024

ответ

0
SELECT u.* 
FROM User u 
INNER JOIN Listing l USING (user_id) 
LEFT OUTER JOIN User_billing b USING (user_id) 
WHERE b.user_id IS NULL; 
+0

Этот, похоже, работает благодаря. Я добавил в предложение WHERE l.status и отлично поработал. – puks1978

0

Постарайся ...

SELECT user.user_id, user.first_name, user.email 
FROM user 
LEFT JOIN listing ON listing.user_id = user.user_id AND listing.status = 1 
WHERE user.user_id NOT IN (SELECT user_id FROM billing) 

или ...

SELECT user.user_id, user.first_name, user.email 
FROM user 
LEFT JOIN listing ON listing.user_id = user.user_id AND listing.status = 1 
LEFT JOIN billing ON billing.user_id = user.user_id 
WHERE billing.user_id IS NULL 

Я рекомендую второй метод над первой просто из-за NOT IN и времени выполнения В.С. СЛЕВА JOIN, который намного быстрее и использует меньше ресурсов

1

Вы можете попробовать что-то вроде этого.

select * from usertable inner join listing on usertable.user_Id=listing.user_Id 

Используя это, вы можете получить данные из этой таблицы. У вас есть моё мнение?

+0

Привет, этот не работает. Он дает результаты, даже если у пользователей есть неактивные списки. Он показывает пользователям, которые не добавили платежные реквизиты, но не ограничивают их только активными списками. – puks1978

+0

Да, этот запрос доступен только для получения данных из таблицы. – chintan

+0

Вы должны добавить WHERE user.user_id NOT IN (SELECT user_id FROM billing) – chintan

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