mysql - 是否有任何默认表可供我将其用作别名?

标签 mysql sql

我有这个查询:

$db
->prepare("INSERT INTO
             events (post_id, table_code, other_id, user_id, author_id, date_time )
             select ?, 15, ?, ?, ?, UNIX_TIMESTAMP()
              UNION ALL
             select ?, 15, ?, ?, ?, UNIX_TIMESTAMP()
               from (select 1) as a
              where 1=?
")->execute(array($answer_id, $answer_id, $author_ques_id, $author_ques_id,
                  $answer_id, $answer_id, $author_ques_id, $author_ans_id,
                  ($yourCondition?1:0) ));

请关注这一行:

from (select 1) as a

我的查询也有效,一切都很好。

我只记得我在某处读到有一个默认表名称​​(类似于double),我可以使用它来代替(选择1)在本例中为。有人知道那是什么吗?

最佳答案

您正在考虑双重。这是从 Oracle 借来的。所以代替:

select ?, 15, ?, ?, ?, UNIX_TIMESTAMP()
from (select 1) as a

你可以写:

select ?, 15, ?, ?, ?, UNIX_TIMESTAMP()
from dual

这已记录在案here :

DUAL is purely for the convenience of people who require that all SELECT statements should have FROM and possibly other clauses. MySQL may ignore the clauses. MySQL does not require FROM DUAL if no tables are referenced.

不过,我不确定这是真的。我认为 from 可能需要与 wheregroup by 子句一起使用。

关于mysql - 是否有任何默认表可供我将其用作别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37847374/

相关文章:

java - 同步这个惰性初始化

java - Mysql java执行更新错误

mysql - 我如何进行此选择查询

sql - ILE RPG 静态 SQL 获取游标的第一行

mysql - 组合三个 SELECT 语句时出现问题,UNION 不起作用

mysql - SQL SELECT 语句显示基于值 ("win"或 "loss"的赢/输数)

mysql - 我需要截断一个表然后插入新的寄存器,但用户看不到这个

php - 检查用户输入和防止mysql注入(inject)的方法有哪些?

php - 如何获取自动递增变量并将其插入到插入查询中

sql - 合并两个表还是将它们分开?