查询中SQL未知P2用法



下面有一个SQL查询:

INSERT INTO `permissions` (
`name`,
`display_name`,
`module_id`,
`parent_id`,
`parent_name`,
`is_main_menu`,
`order`,
`is_active`
)
VALUES
(
'appointment_type.index',
"msg('lbl_appointment_type')",
23,
(SELECT
p2.id
FROM
(SELECT
*
FROM
permissions
WHERE NAME = "setting.mentor_mentee") p2),
"setting.mentor_mentee",
0,
1,
1
);

我很难理解下面的部分:

(SELECT p2.id FROM (SELECT * FROM permissions WHERE NAME = "setting.mentor_mentee")p2)

我不确定我在调查什么。这个p2是什么?请给我指正确的方向。提前谢谢。

它什么都不做。您可以将其表述为:

VALUES ('appointment_type.index', 'msg(''lbl_appointment_type'')', 23,
(SELECT p.id
FROM permissions p
WHERE p.NAME = 'setting.mentor_mentee'
),
'setting.mentor_mentee', 0, 1, 1
)

请注意对单引号的偏好。

在实践中,我建议使用insert . . . select:进行此操作

INSERT INTO
SELECT 'appointment_type.index', 'msg('lbl_appointment_type')', 23,
p.id
'setting.mentor_mentee', 0, 1, 1
FROM permissions p
WHERE NAME = 'setting.mentor_mentee';

为什么有人用子查询编写代码?据推测,编写查询的人将INSERTUPDATE/DELETE混淆了。这些不允许子查询引用被修改的表——除非使用类似于双重子查询的破解。正常的解决方案不是双个子查询,而是使用JOIN

这不是INSERT的问题,因为从概念上讲,子查询在插入行之前返回其结果集。

最新更新