当前位置: 首页 > 面试题库 >

mysql查询两个表,UNION和where子句

蔚元明
2023-03-14
问题内容

我有两张桌子。

我这样查询:

SELECT * FROM (
   Select requester_name,receiver_name from poem_authors_follow_requests  as one 
UNION 
Select requester_name,receiver_name from poem_authors_friend_requests as two 
) as u 
where (LOWER(requester_name)=LOWER('user1') or LOWER(receiver_name)=LOWER('user1'))

我使用UNION是因为如果用户在第一个表和第二个表中都存在,我想为每个用户获取不同的值。

例如:

table1

nameofuser
peter

table2

nameofuser
peter

如果peter在任何一张桌子上,我应该一次获得名称,因为它在两个桌子上都存在。

我仍然从第一张桌子得到一排,从第二张桌子得到第二排。怎么了?

任何帮助表示赞赏。


问题答案:

您的SQL有两个问题:

  1. (这是 不是 问题,但应考虑)使用WHEREUNION,而不是表,您创建性能噩梦:MySQL将创建一个包含一个临时表UNION,然后查询它在WHERE。在字段(LOWER(requester_name))上使用计算会使情况更糟。

  2. 得到两行的原因是,这UNION DISTINCT只会抑制实际重复,因此元组(someuser,peter)和元组(someotheruser, peter)将导致重复。

编辑

(someuser, peter)复制(peter, someuser)您的内容,可以使用:

SELECT
  IF(requester_name='peter', receiver_name, requester_name) AS otheruser
FROM
  ...
UNION
SELECT
  IF(requester_name='peter', receiver_name, requester_name) AS otheruser
FROM
  ...

因此,您只选择someuser您已经知道的:peter



 类似资料:
  • 问题内容: 是否可以执行这样的mysql查询? 我需要在一般的“ where”子句中使用子查询的结果。 问题答案: 您可以将其包装在子查询中,如下所示:

  • 你好 上面的查询包括: WITH子句-本条款的目的是从2011年至2016年间购买物品的客户中识别不同的。 第一次查询-查询的主要目的是检查上述WITH子句中是否存在任何选定的。此外,该查询还应检查所选的是否与特定的匹配,并在名为的列中将其标记为 第二次查询-此查询执行的操作与第一次查询几乎相同。唯一的区别是,它在名为“DRIVE_TYPE”的列中将标记为 您可能已经注意到,在这两个查询中,都有一

  • 问题内容: 我有一个查询: 我只想从表中选择周期和年份等于的行: 我知道最简单的方法是使用连接,但是问题是-在应用程序中,我只能在后面添加一个子句 因此,解决方案应该是: 那可能吗? 编辑: 结果应与以下相同: 问题答案: 您可以为条件使用多个列: 但是戈登的解决方案可能更快。

  • 问题内容: 我有一张表,每个日期都有一些统计信息,我想用MySQL列出。对于某些日期,将没有统计信息,因此结果应类似于以下内容: 2013-03-01:3 2013-03-02:2 2013-03-03:0 2013-03-04:1 我发现可以用一个单独的表(包含所有可能的日期和LEFT JOIN)来解决用0-零-填补空白的问题。到目前为止,一切都很好。 统计信息(展示次数)位于“ campaig

  • 问题内容: 我想知道如何用php中的两个表进行查询? 我有这个查询 但是我想将col_Autor与另一个表(tb_autores)中的au_Nombre进行比较,并从中获取au_Photo和其他值,我该怎么做? 问题答案: 通过在FROM子句中指定两个表并在where子句中建立关系,可以在不使用JOIN关键字的情况下进行简单的联接查询。 例如

  • 我有一个问题,我很难用laravel雄辩的ORM编写这个问题。 如果有人能帮忙,我将不胜感激。 下面是SQL表达式: