MySQL ўставіць, калі радкі існуюць у табліцы часовай

Я хачу, каб ўставіць радок у маю табліцу, калі ёсць 1 або некалькі запісаў у маёй часовай табліцы TEMP . Звычайна гэта наадварот, дзе я хацеў бы абнавіць, калі радок існуе, і ўставіць у адваротным выпадку. Так як жа я вырашыць гэтую праблему? Гэта не падобна, ёсць , калі існуе заяву я мог бы выкарыстаць, і хуткі пошук паказвае мне, што INSERT INTO не падтрымлівае , дзе -clause.

1
Я думаю, вам прыйдзецца стварыць зберажоную працэдуру, каб вырашыць гэтую праблему
дададзена аўтар user4035, крыніца
Я думаю, вам прыйдзецца стварыць зберажоную працэдуру, каб вырашыць гэтую праблему
дададзена аўтар user4035, крыніца

6 адказы

insert into definitely does support a where clause. You just have to use the insert into . . . select form of it:

insert into mytable()
    select 
    from (select count(*) as cnt from temp) c
    where c.cnt > 0;

Добра, тэхнічна , дзе з'яўляецца часткай выберыце , але гэта не тое, што вы хочаце.

MySQL не падтрымлівае , дзе пункт без з п. Гэта вырашае гэтую праблему з дапамогай з п, каб вылічыць колькасць у табліцы тэмп. Калі лік больш 0 (або любы іншы нумар, які вы хочаце), то ён устаўляе радок.

4
дададзена
Гэта вялікая і добра працуе рашэнне! Дзякуй за дапамогу!
дададзена аўтар Anton Gildebrand, крыніца

insert into definitely does support a where clause. You just have to use the insert into . . . select form of it:

insert into mytable()
    select 
    from (select count(*) as cnt from temp) c
    where c.cnt > 0;

Добра, тэхнічна , дзе з'яўляецца часткай выберыце , але гэта не тое, што вы хочаце.

MySQL не падтрымлівае , дзе пункт без з п. Гэта вырашае гэтую праблему з дапамогай з п, каб вылічыць колькасць у табліцы тэмп. Калі лік больш 0 (або любы іншы нумар, які вы хочаце), то ён устаўляе радок.

4
дададзена
Гэта вялікая і добра працуе рашэнне! Дзякуй за дапамогу!
дададзена аўтар Anton Gildebrand, крыніца
2
дададзена
Так, ёсць, як і іншыя адказы паказалі. Паглядзіце на функцыі IF() у MySQL.
дададзена аўтар Connor Gurney, крыніца
2
дададзена
Так, ёсць, як і іншыя адказы паказалі. Паглядзіце на функцыі IF() у MySQL.
дададзена аўтар Connor Gurney, крыніца

Як @Gordon Linoff ў адказ , наступны заснаваны на той жа ідэі выкарыстання INSERT ... SELECT замест INSERT ... VALUES , таму што былы дазваляе адзін кінуць у WHERE ўмова. Тым не менш, я хацеў бы падысці да праблемы які абыходзіць абмежаванні WHERE без АД па-рознаму:

INSERT INTO target_table (list_of_columns)
SELECT *
FROM (SELECT list_of_values) s
WHERE EXISTS (SELECT * FROM temp_table)
;

Калі часовая табліца можа ўтрымліваць вялікая колькасць радкоў, гэта можа працаваць лепш, чым прапанова Гордана, таму што EXISTS (SELECT * ...) ня трэба сканаваць ўсю табліцу, калі ёсць па меншай меры адзін радок, якая адпавядае подзапросов, а SELECT COUNT (*) ... будзе трэба падлічыць усе радкі кожны раз.

Калі не можа быць шмат радкоў ў часовай табліцы, то перавага, калі такія маюцца, верагодна, будзе непрыкметны.

0
дададзена

Як @Gordon Linoff ў адказ , наступны заснаваны на той жа ідэі выкарыстання INSERT ... SELECT замест INSERT ... VALUES , таму што былы дазваляе адзін кінуць у WHERE ўмова. Тым не менш, я хацеў бы падысці да праблемы які абыходзіць абмежаванні WHERE без АД па-рознаму:

INSERT INTO target_table (list_of_columns)
SELECT *
FROM (SELECT list_of_values) s
WHERE EXISTS (SELECT * FROM temp_table)
;

Калі часовая табліца можа ўтрымліваць вялікая колькасць радкоў, гэта можа працаваць лепш, чым прапанова Гордана, таму што EXISTS (SELECT * ...) ня трэба сканаваць ўсю табліцу, калі ёсць па меншай меры адзін радок, якая адпавядае подзапросов, а SELECT COUNT (*) ... будзе трэба падлічыць усе радкі кожны раз.

Калі не можа быць шмат радкоў ў часовай табліцы, то перавага, калі такія маюцца, верагодна, будзе непрыкметны.

0
дададзена