'SELECT * FROM t1
          LEFT JOIN t2 ON t2.wid = t1.wid
          UNION
          SELECT * FROM t1
          RIGHT JOIN t2 ON t2.wid = t1.wid
          ORDER BY t2.wid
          LIMIT ' . $number;

您能帮我这些代码行吗? 我尝试了一个多月来解决相同的问题。

#1楼 票数:1 已采纳

您尚未确切说明查询所遇到的问题,因此我们只能猜测。 但是,正如StewS2所观察到的那样,原始查询中的ORDER BYLIMIT子句与第二个子查询相关联,而不与UNION的结果相关联。 那可能是你的问题。 在这种情况下,当t2.widNULL (作为外部t2.wid的结果)时,可能还希望按t1.wid进行排序, 反之亦然

要将ORDER BYLIMIT子句与整个行集相关联,您需要一个内联视图(如建议的StewS2)或一个临时表。 无论哪种方式,您都必须克服列命名问题:联接结果的每一列在内联视图或临时表中都需要一个唯一的名称,但是至少对于名为wid的列会有冲突。 如果是自连接,则每一列都会发生冲突。 SQL有一个解决方案:分配不同的列别名。 但是,您需要明确地这样做。 您不能将其与*通配符结合使用。

这样的事情可能就是您想要的:

SELECT *
FROM (
  -- this is the inline view
  SELECT t1.wid AS t1_wid, t1.x, t2.wid AS t2_wid, t2.y
  FROM t1 LEFT JOIN t2 ON t2.wid = t1.wid

  UNION

  SELECT t1.wid AS t1_wid, t1.x, t2.wid AS t2_wid, t2.y
  FROM t1 RIGHT JOIN t2 ON t2.wid = t1.wid
) full -- table alias required, even though it's never referenced
-- coalesce() provides the first-listed non-null value
ORDER BY COALESCE(t1_wid, t2_wid)
LIMIT 100

StewS2也是正确的,如果您可以使用完全联接,那么整个事情会容易得多。 不幸的是,MySQL不支持该功能。

#2楼 票数:0

正如@AbhikChakraborty所暗示的,您应该删除表别名“ t2”。 从ORDER BY子句中的字段名称开始。 您必须将工会视为本质上是:

SELECT *
  FROM (SELECT *
          FROM t1
          LEFT JOIN t2
            ON t2.wid = t1.wid
        UNION
        SELECT *
          FROM t1
         RIGHT JOIN t2
            ON t2.wid = t1.wid)
LIMIT ....
 ORDER BY wid

因此,ORDER BY子句只能引用子查询中的公共字段名称。 我对LIMIT语法不熟悉,但是我怀疑它会以相同的方式工作。

最后,根据您的mySQL功能,您似乎可以通过完全外部联接来实现此目的(如果t1和t2实际上是相同的表)。

祝好运,

  ask by Karmen translate from so

未解决问题?本站智能推荐:

3回复

mysql中的联合和汇总

将标头与使用汇总汇总构造的实际数据结合起来以将其写入.csv文件时,我找不到导致此错误的原因。 当我尝试以下查询时, 我得到这个错误 提前致谢。
1回复

MySql中的表联合

我正在对两个select语句执行并集操作,但得到的结果包含随机行,例如表一和表二中的一些行。但是我想首先从表一中获取所有行,然后从表二中获取所有行。 MySql数据库。 这是我正在使用的查询: 结果如下:
2回复

带有 100 个表的联合的 MySQL 查询与 100 个单独的查询哪个更高效?

我有一个使用 MySQL DB 和 MyISAM 表的遗留项目,DB 设计远非完美。 我遇到了 N+1 问题,因为实体表和entity_SOME_ID_subentity表的数量具有类似的基本结构和一些随机附加列,其中SOME_ID是实体表中记录的主键值。 当然,这绝对不是很好,但让我们假设这是我
2回复

SQL列合并和聚合函数

我有一个简单的表,其中有两列(感兴趣的两列,还有一个ID)...我有一个ajax搜索,它只是在寻找关键字...然后将其发送到我的真实搜索中... ajax搜索并不关心它们是什么,但是它们必须与众不同... 如何将两列合并在一起: 这样我就可以 我尝试做一个UNION,但不确
3回复

SQL:UNION 表并避免重复键

我正在尝试合并 2 个表,但要避免给定键 (id) 上的行重复。 在 ID 重复的情况下,应选择表 B 中的行。 上面的查询将简单地连接所有行,但我正在尝试实现如下所示的结果。 表A 表B 结果
5回复

SQL-JOIN来自两个表的两个列

我需要帮助来制定查询。 我想从表A和表B中选择所有DISTINCT颜色。 这是查询的结果: 我有这些表: 表A 表B 我努力了: 但是我没有得到所有的颜色。 :(
1回复

如何从两个 SQL 表中搜索条目并知道它来自哪个表?

我正在尝试查找特定条目。 这个条目只能出现在我的两个表中的一个中,并且永远不会在任何一个表中重复。 这是我的表格的缩小版本示例: 表格1: 表 2(没有相同数量的列): 要查找此条目,我需要指定日期和名称。 您可以假设名称永远不会重复。 所以假设我想找到莎拉 2020/01/22 她
2回复

我的sql代码哪里出了问题?

这段代码什么也没给我返回,您能帮我为什么不收回价值吗?