3

私はmysqlを初めて使用します。table2にレコードが存在しない場合、table1にレコードを挿入する際に問題が発生します。2つのテーブルtable1とtable2が次の形式であります。

table1

dep_id  start     stop     modified deleted                 
1       23456789  167921525   Yes      No
2       34567812  345678145   Yes      No
3       32789054  327890546   No       No


table2

start     stop     modified deleted                 
23456789  167921525  No       No
34567823  345678145  No       No
32789053  727890546  No       No

table2の「start」列と「stop」列に値が存在しない場合にのみ、table1の開始フィールドと停止フィールドの値に値を挿入しようとしています。存在する場合は、エラーをスローする必要があります。これらのテーブルには、主キーの外部キーの関係はありません。正しい構文がわからないことをお詫びしますが、mysqlとPHPでこのようなことをしなければなりません。

Replace Into into table1 set 'start'=> $start,'stop' => $stop
(select 'start','stop' from table2 where table1.start and table1.stop not in table2.start and table2.stop);

これらの2つのテーブルをクエリして、Table1に挿入する前にTable1.startフィールドとTable1.stopフィールドがTable2.startおよびTable2.stopと一致しないかどうかを確認するにはどうすればよいですか?

4

3 に答える 3

3

できるよ:

INSERT INTO table1 (start, stop)
SELECT    a.*
FROM      (SELECT 123456789 start, 234567890 stop) a
LEFT JOIN table2 b ON (a.start,a.stop) IN ((b.start,b.stop))
WHERE     b.start IS NULL

ここ123456789で、とはそれぞれと234567890の入力値です。startstop

次に、使用しているDBインターフェイス(PDO、mysqliなど)に基づいて、rowCountまたはnum_rows_affectedで確認できます。0の場合、レコードは挿入されませんでした。それ以外の場合、挿入が発生しました。


SQLFiddleデモ

于 2012-08-17T01:22:34.220 に答える
0

これがあなたの望むものだと思います。これは$startと$stopの2つの値を取り、table2に存在しない場合にのみ挿入を行います。

insert into table1 (start, stop)
    select *
    from (select $start as start, $stop as stop) t
    where not exists (select 1 from table2 where start = $start and stop = $end)
于 2012-08-17T01:22:18.983 に答える