是否可以在WHERE
查询中以某种方式使用INSERT
子句(或任何其他方式),这样只有在@@hostname
变量为INSERT INTO table_name
(field_1, field_2)
VALUES
('foo', 'bar')
WHERE @@hostname = 'url.to.host.here';
时才有效一定的价值?例如:
> est se t df Pr(>|t|)
factor(ss748)Varian 0.78109445 0.1399757 5.5802158 254.8814 6.130658e-08
factor(ss749)Variant 0.43698935 0.2145538 2.0367359 213.579 4.291038e-02
factor(ss750)Variant 0.07076991 0.1757233 0.4027350 123.730 6.878381e-01
factor(ss751)Variant 0.09796057 0.1304451 0.7509714 4560.5547 4.52786e-01
> lo 95 hi 95 nmis fmi lambda
factor(ss748)Variant 0.50543827 1.0567506 NA 0.13203983 0.12525575
factor(ss749)Variant 0.01407524 0.8599035 NA 0.14480694 0.136835
factor(ss750)Variant -0.27704297 0.4185828 NA 0.19272691 0.17978321
factor(ss751)Variant -0.15777509 0.3536962 NA 0.02997128 0.02954597
答案 0 :(得分:2)
注意:@@ hostname是MySQL主机名。
您可以使这样的选择查询无效,因为MySQL优化器将此视为不可能的WHERE
。
SELECT
'field_1'
, 'field_2'
FROM
DUAL
WHERE 0;
MySQL有一个INSERT INTO ... SELECT
查询,所以当您使用时:
INSERT INTO
table_name (
field_1
, field_2
)
SELECT
'field_1'
, 'field_2'
FROM
DUAL
WHERE 0
不会执行INSERT INFO。
使用时:
INSERT INTO
table_name (
field_1
, field_2
)
SELECT
'field_1'
, 'field_2'
FROM
DUAL
WHERE 1;
INSERT INTO
将被执行。请参阅演示http://sqlfiddle.com/#!9/5623f/1
使用@@ hostname检查:
INSERT INTO
table_name (
field_1
, field_2
)
SELECT
'field_1'
, 'field_2'
FROM
DUAL
WHERE IF(
@@hostname = 'ip-10-0-0-15'
, 1
, 0
);
请参阅演示http://sqlfiddle.com/#!9/d9081/4。
作为旁注,您也可以使用它来“支持”CHECK(MySQL不支持带有CREATE TABLE语句的CHECK),通常需要触发器才能执行此操作。
答案 1 :(得分:0)
这个怎么样:
IF (STRCMP(@@hostname, 'url.to.host.here') = 0) THEN
INSERT INTO table_name
(field_1, field_2)
VALUES ('foo', 'bar')
END IF