【问题标题】:alias in subselect of select possible in any way选择的子选择中的别名可能以任何方式
【发布时间】:2015-02-26 11:28:39
【问题描述】:

澄清:我使用 jdbc over jpql native query with mysql

em.createNativeQuery(MyQuery).getResultList();

是否可以在一个这样的 MyQuery 字符串中执行下面所写的操作?无需创建临时表、视图、存储过程或执行其他语句。如果否,那么简单的否就可以了,也许欢迎解释为什么不。

我想在 select 内的 subselect 中使用 B

SELECT (SELECT COUNT(*) FROM B) CNT FROM

其中 B 是另一个选择的别名。

 (SELECT * FROM XY) B

这可能是任何地方:

INNER JOIN 
(SELECT * FROM XY) B ON ...

这不起作用,但问题是:

是否可以通过任何(其他)方式在单个查询中执行此操作(无需创建视图)?

基本上我想在选择子句中的选择中使用选择结果集(例如在那里计算一些东西)。而且我想在查询的不同部分重用它,因此需要别名。

【问题讨论】:

  • 你的问题真的没有意义。除非B 恰好有一列和零或一行,否则您的第一个查询可能会返回错误。请编辑问题并提供更多详细信息。
  • 您需要为您的查询选择 x,y,z FROM (SELECT * FROM B) 才有意义。你可以 SELECT x,y,z FROM (SELECT * FROM (SELECT a AS x, b as y FROM XY)) 如果你想要内部,内部选择
  • 请写出更清晰简洁的问题。

标签: mysql sql select subquery


【解决方案1】:

我认为您正在寻找的是类似于 CTE 表的东西:

With B (columnA, columnB) as
(
Select columnA, columnB
  from XY
)

Select count(*)
  From B

或者对于 MySQL:

CREATE TEMPORARY TABLE B (columnA varchar(10), columnB varchar(20))
Insert into B (columnA, columnB) values
select columnA, columnB
  from XY

Select count(*)
  From B

【讨论】:

  • 其实可以,但是没有CTE(mysql不支持),所以你说我现在能做的就是创建一个临时表或视图?
  • 是的,据我所知,这可能是最好的解决方法
  • 如果我可以在一个返回结果集的 sql 语句中使用它就很好了。我可以吗?对我来说,这看起来像是两个单独的语句,我只是想避免创建视图或使用存储过程(我需要单个 jdbc 选择)
  • 这应该可以作为单个查询,虽然我不是 jdbc 专家,但你可以试试看它是否有效?
【解决方案2】:

在 MySQL 中,您可以使用变量的技巧来完成此操作:

SELECT b.*, @cnt
FROM (SELECT b.*, @cnt := @cnt + 1 as cnt
      FROM b CROSS JOIN
           (SELECT @cnt := 0) vars
     ) b;

【讨论】:

  • 抱歉,我无法用变量解决这个问题,我需要一个完整的结果集来处理。
  • @user1132655 。 . .你的评论没有意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多