【问题标题】:Merging two identical select queries合并两个相同的选择查询
【发布时间】:2013-02-17 20:18:01
【问题描述】:

我有两个相同的 sql 查询,我想合并结果。 第一个是:

SELECT USER.USER_ID, NAME, SURNAME, EMAIL, STATUS, PHOTO 
FROM FRIENDLIST, USER, USER_PROFILE 
WHERE FRIENDLIST.USER_ID=". $userID ." 
  AND APPROVED='YES' 
  AND USER.USER_ID=FRIENDLIST.USER_ID 
  AND USER.USER_ID=USER_PROFILE.USER_ID

第二个是:

SELECT USER.USER_ID, NAME, SURNAME, EMAIL, STATUS, PHOTO 
FROM FRIENDLIST, USER, USER_PROFILE 
WHERE FRIENDLIST.FRIEND_ID=". $userID ."
  AND APPROVED='YES' 
  AND USER.USER_ID=FRIENDLIST.USER_ID 
  AND USER.USER_ID=USER_PROFILE.USER_ID

我尝试使用联合,但我得到一个空结果,而不是 $userID=2 的 2 行。

SELECT USER.USER_ID, NAME, SURNAME, EMAIL, STATUS, PHOTO
FROM FRIENDLIST, USER, USER_PROFILE 
WHERE FRIENDLIST.USER_ID=". $userID ." 
  AND APPROVED='YES' 
  AND USER.USER_ID=FRIENDLIST.USER_ID 
  AND USER.USER_ID=USER_PROFILE.USER_ID 
UNION
SELECT USER.USER_ID, NAME, SURNAME, EMAIL, STATUS, PHOTO 
FROM FRIENDLIST, USER, USER_PROFILE
WHERE FRIENDLIST.FRIEND_ID=". $userID ." 
  AND APPROVED='YES' 
  AND USER.USER_ID=FRIENDLIST.USER_ID 
  AND USER.USER_ID=USER_PROFILE.USER_ID

有什么想法吗??

【问题讨论】:

  • 要清楚——你是说每个单独的查询都适用于 $userID=2(即产生 2 行),但 UNION 给你一个空的结果集?
  • 他们每个人都返回 1 行..与联合我期望 2 但我得到零。
  • 至少你需要UNION ALL;否则将删除重复项(使操作毫无意义)。
  • 嗯,UNION 是隐式 UNION DISTINCT —— 所以两次发出完全相同的查询会给你 1 行,而不是 2 —— 你需要使用 UNION ALL 来获取重复项。
  • 我想要不同的结果。我刚刚注意到,从 $userID 的值来看,我想要的结果是“否”。我将脚本转移到另一个具有不同值的数据库中!谢谢大家的回答!我需要睡觉!

标签: mysql select union


【解决方案1】:

我会这样组合它们:

SELECT USER.USER_ID, NAME, SURNAME, EMAIL, STATUS, PHOTO 
FROM FRIENDLIST, USER, USER_PROFILE 
WHERE (FRIENDLIST.USER_ID=". $userID ." or FRIENDLIST.FRIEND_ID=". $userID .")
  AND APPROVED='YES' 
  AND USER.USER_ID=FRIENDLIST.USER_ID 
  AND USER.USER_ID=USER_PROFILE.USER_ID

好吧,严格来说并不正确。我会为连接使用正确的语法并为表使用短别名:

SELECT u.USER_ID, NAME, SURNAME, EMAIL, STATUS, PHOTO 
FROM FRIENDLIST f join
     USER u
     on u.USER_ID = f.USER_ID  join
     USER_PROFILE up
     on u.USER_ID = up.USER_ID
WHERE (f.USER_ID=". $userID ." or f.FRIEND_ID=". $userID .") and
      APPROVED='YES'

union 是另一种效率较低的方法来做同样的事情。如果结果集为空,那是因为没有人符合条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-26
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 2016-11-10
    • 2017-05-18
    • 2014-11-09
    相关资源
    最近更新 更多