回答

收藏

选择另一个表中没有外键的主键

技术问答 技术问答 291 人阅读 | 0 人回复 | 2023-09-14

为简化起见,我有两个使用外键一对一关联的表,例如:
3 n- I0 T' r' W' I* {, F, ]Users table:
, l8 I7 {$ y- E4 i* u# g" R5 Pid
, q+ t3 _+ s! B' ~# ^; K2 A; Uname6 ]" W0 U- R1 [4 b
Actions table:
' C9 w# }/ |7 t! l; Gid* }2 o3 f9 ]& j% w( a
user_id
) k2 p. A+ |2 g9 E一个用户可能有很多动作,也可能没有。我需要一个sql select来返回在actions表中没有user_id值的用户id。; j5 C) }* m' P8 Q! y& ^0 ~/ ^
Users Table:! U; `. p' `! J( ~, ]
id      name: f5 M8 \1 n5 h8 M( [
1       John
  O$ I+ l) S2 p5 S3 C6 w1 [2       Smith
1 A2 U0 N8 z9 p" Z! b+ H' @3       Alice
% G# G( h( }3 w  G3 V8 b# [Actions Table:
- f) e: w: v" Q6 y7 S* Nid      user_id
: I. R  @8 i- G% i( Q/ f9 g. Q1       36 V: |% D5 x6 L6 c
2       1
1 \8 z: ~2 d1 P4 K" V& a4 ]所以我需要一个返回用户ID 2(Smith)的SQL查询,因为外键值不包含ID 2
" }& `, g) E, a4 L; ^) X我尝试了以下SQL,但它返回了所有用户ID:
% T0 K. |- i& A) ?6 s& v* tSELECT users.id from users left join actions on actions.user_id is null
' i/ ?; D- d& ^# z  |  l9 I               
; v6 v- `2 c) ~% y* }解决方案:8 i+ z! J8 a. @  m
                0 t+ e, K% @! U1 R; x+ u

5 Y  Q2 U* v4 v, ?( ^0 H! x
; e8 d2 h3 V1 U                select u.id
' V: y  C5 E/ F1 z( `5 [+ Z( j( Cfrom users u
/ _" ]# F$ G' k' H$ Dleft outer join actions a on a.user_id = u.id
, x" K$ m) t& d1 J3 _where a.user_id is null
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则