2012-10-28 32 views
7

Để đơn giản hóa, tôi có hai bảng liên quan với một đến nhiều cách sử dụng một chìa khóa nước ngoài, ví dụ:Chọn khóa chính mà không có phím nước ngoài trong bảng khác

Users table: 
id 
name 

Actions table: 
id 
user_id 

một người sử dụng có thể có nhiều hành động hay không . Tôi cần một lựa chọn sql trả về id người dùng mà không có một giá trị user_id trong bảng hành động.

Users Table: 
id  name 
1  John 
2  Smith 
3  Alice 

Actions Table: 
id  user_id 
1  3 
2  1 

Vì vậy, tôi cần một truy vấn sql mà trả về user id 2 (Smith) vì các giá trị chính nước ngoài không bao gồm id 2

Tôi đã thử các lệnh SQL sau đây, nhưng nó sẽ trả về tất cả các id người dùng :

SELECT users.id from users left join actions on actions.user_id is null 

Trả lời

11
select u.id 
from users u 
left outer join actions a on a.user_id = u.id 
where a.user_id is null 
2
SELECT u.id 
FROM users u 
LEFT JOIN actions a 
    ON a.user_id = u.id 
WHERE a.user_id IS NULL 
+0

Nó không trả về kết quả nào. – SaidbakR

+0

Vâng, có lỗi đánh máy trong truy vấn của tôi. – bobwienholt

4

phiên bản tối ưu sẽ là:

SELECT u.id 
FROM users u 
LEFT JOIN actions a 
ON a.user_id = u.id 
AND ISNULL(a.user_id) 
+0

nó trả về tất cả người dùng. – SaidbakR

+0

bạn đúng Tôi đã có một loại bỏ lỡ chính xác là: ON a.user_id = u.id – ChaosClown

Các vấn đề liên quan