【问题标题】:Selecting data from table with join使用连接从表中选择数据
【发布时间】:2011-08-24 05:56:06
【问题描述】:

我有两个表,我正在尝试使用外部左连接获取信息。

我有以下疑问:

SELECT * 
  FROM sportjefit_user 
  LEFT OUTER JOIN vriend ON sportjefit_user.id = vriend.vriend2

这个结果:

我只想要 'vriend1' 或 'vriend2' 不是 48 的记录

有人可以帮帮我吗?

谢谢。

【问题讨论】:

    标签: php mysql sql join outer-join


    【解决方案1】:
    SELECT * FROM sportjefit_user 
    LEFT OUTER JOIN vriend ON sportjefit_user.id = vriend.vriend2
    WHERE vriend1 <> 48
    OR vriend2 <> 48
    

    或者,如果您想确保两个字段都不是 48

    SELECT * FROM sportjefit_user 
    LEFT OUTER JOIN vriend ON sportjefit_user.id = vriend.vriend2
    WHERE vriend1 <> 48
    AND vriend2 <> 48
    

    【讨论】:

      【解决方案2】:

      添加一个where clause,它将几乎完全映射到您所说的您需要的内容:

      SELECT * 
      FROM sportjefit_user LEFT OUTER JOIN vriend ON sportjefit_user.id=vriend.vriend2
        where !(vriend1=48 or vriend2=48) 
        or (vfriend1 is null and vfriend2 is null);
      

      【讨论】:

      • 我试过了,但这会返回“48”的值。我想选择 vriend1 或 vriend2 都不等于 48 的值。我无法使用 is NULL 进行选择,因为这些字段可能会在某些时候被填满。
      • 所以你的意思是 vfriend1!=48 AND vfriend2!=48
      • 你也可以试试!(vfriend1=48 or vfriend2=48)
      • 可能是因为数据?如果您使用的数据是您上面拥有的数据,则您没有任何值非空且一个值不是 48 的记录
      • 如果我也想选择有NULL值的用户怎么办? :(
      【解决方案3】:

      试试这个:

      SELECT * FROM sportjefit_user 
      LEFT OUTER JOIN vriend 
      ON sportjefit_user.id = vriend.vriend2
      WHERE ((vriend.vriend1<>48) AND (vriend.vriend2<>48))
      

      【讨论】:

      • 这将返回 vriend1 或 vriend2 不是 48 的值。我想选择它们都不等于 48 的值。我现在得到的是 .. 例如:vriend1= 51 , vriend2 = 48 或另一个例子,vriend1 = 48 vriend2 = 89
      • @Seeger Mattijs:对不起,我不明白。那么,您是否需要 vriend1 既不是 48 也不是 vriend2 是 48 的所有记录?所以,我认为您可以将OR 更改为AND。如果这是您需要的,请告诉我...
      • 这样做了:!(vfriend1=48 or vfriend2=48) or (vfriend1 is null and vfriend2 is null)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 2019-07-04
      • 2013-06-30
      • 2018-03-18
      相关资源
      最近更新 更多