2

クエリ全体でその変数を使用できるように、MYSQL で式の結果を保持する変数を定義する方法が必要です。
これが可能になるように:

SELECT 
IF(VALID,EMPLOYEE_NAME,"NULL") AS NAME,   /** <-- Note *VALID* 
IF(VALID,ID,"NULL") AS ID,   /** <-- And here... 
IF(VALID,OCCUPATION,"NULL") AS OCCUPATION,   /** <-- And here... 

IF((**LONG EXPRESSION**), TRUE, FALSE) AS VALID; /** <-- Taken from here

ここで、LONG EXPRESSION は、IF ステートメントで返されるすべての列に配置する必要がある非常に長い式になる可能性があります。多くの IF があります。

私の本能は、すべての手続き型言語のようにこれを行うことができるはずだと教えてくれます:

$var = LONG_EXPRESSION(....);
if($var) {..};
if($var) {..};
if($var) {..};
if($var) {..};

このようにして、より論理的になり、エラーが発生しにくくなります。簡単に維持でき、読みやすく、おそらく最適化さえできます。

MYSQL 内にこれに相当するものはありますか?
したがって、実行のすべての行に対してパラメーターを定義しますか?

4

2 に答える 2

1

サブクエリが必要なだけです。

SELECT IF(VALID,EMPLOYEE_NAME,"NULL") AS NAME,   /** <-- Note *VALID* 
       IF(VALID,ID,"NULL") AS ID,   /** <-- And here... 
       IF(VALID,OCCUPATION,"NULL") AS OCCUPATION,
       ...,
       VALID
from (select t.*, IF((**LONG EXPRESSION**), TRUE, FALSE) AS VALID
      from t
    ) t
于 2012-07-20T01:27:08.903 に答える
0

おそらく、これを行うより適切な方法は、元のテーブルと長い式を含む句をOUTER JOIN使用してサブクエリを実行することです。WHERE

SELECT IF(b.rowid IS NULL, "NULL", a.employee_name) AS name,
       IF(b.rowid IS NULL, "NULL", a.id) AS id,
       IF(b.rowid IS NULL, "NULL", a.occupation) AS occupation,
       ...,
       IF(b.rowid IS NULL, 0, 1) AS valid
FROM mytable a
LEFT OUTER JOIN
(SELECT rowid FROM mytable
 WHERE **LONG EXPRESSION**) b
ON a.rowid = b.rowid

rowidこれは、テーブル内の一意のキー列であると想定しています。

于 2012-07-20T04:26:20.247 に答える