2

問題: 記事番号と記事に関連する 2 つのパラメーターを保持する MySQL データベース テーブルがあります。

article_no | parameter1 | parameter2

1111111    | false      | false

2111111    | true       | true

1222222    | false      | false

2222222    | false      | false

記事は 2 つの記事番号で表されます。違いは、一方が「1」で始まり、もう一方が「2」で始まることです。

問題: 関連する "2" の記事番号の parameter1 が true の場合、"1" で始まるすべての記事番号の parameter2 が "true" になる必要があります。上記の例では、1111111 の parameter2 が「true」になる必要があります。SQLのみでこれを行う方法はありますか?

4

3 に答える 3

2

UPDATE次のような 1 つのクエリでそれを実現できます。

UPDATE 
  t AS l 
    LEFT JOIN t AS r 
      ON SUBSTR(l.article_no, 2)=SUBSTR(r.article_no, 2) 
      AND l.article_no LIKE '1%' 
      AND r.article_no LIKE '2%' 
SET 
  l.parameter2='true' 
WHERE 
  r.parameter1='true'
于 2013-10-03T07:46:28.827 に答える
0

ここに別の答えがあります

update 
    articles as a 
left join 
    articles as b
on 
    substring(a.article_no, 2) = substring(b.article_no, 2)
set 
    a.parameter2 = 'true'
where 
    a.artile_no like '1%' 
    and b.artile_no like '2%'
    and b.parameter2 = 'true';

ところで、「1」で始まる記事番号を持つ行の問題 parameter2 は、「2」で始まる article_no を持つ対応する行で parameter2 が true である場合にのみtrue になる必要があります。「2」で始まる記事番号の行の parameter2 の値を気にしない場合は、最後の条件を削除してください。

主な考え方は、substring() 関数とパラメーター 2 を使用して比較を行う必要があるということです。

 substring(a.article_no, 2) = substring(b.article_no,2)

サブクエリを使用して同じ操作を実行できますが、左結合を使用する方が費用対効果が高くなります。

于 2013-10-03T08:13:31.013 に答える