0

私は次のようなテーブルを持っています

-------------------------
| 援助| tid | dft |
-------------------------
| 1 | 1 | Y |
-------------------------
| 1 | 2 | N |
-------------------------
| 2 | 3 | Y |
-------------------------
| 3 | 4 | Y |
-------------------------
| 3 | 5 | N |
-------------------------

テーブルにクエリを実行して、 aidtidに基づいてtidを取得したいのですが、そのaidのtidが存在しない場合は、デフォルトのtid ( dft列のYで識別)を返す必要があります。

エラーをスローしないがNULLを返す次のことを試しました

選択する

もしも (
    t1.tidはNULLではありません、
    t1.tid、
    ((
        選択する
            t2.tid
        から
            テーブルt2
        どこ
            t2.aid = 1
        AND t2.dft ='Y'
    )。
)AS tid
から
    テーブルt1
どこ
    t1.aid = 1
AND t1.tid = 3

そのコードは存在しないaid1tid3を検索しているので、 dft列でYとしてマークされているのでtid1を返す必要があります。

誰か助けてもらえますか?

4

2 に答える 2

1

これを試して:

SELECT tid
 FROM table t1
WHERE t1.aid = 1
  AND t1.tid = 3
UNION   
SELECT tid
 FROM table t1
WHERE t1.aid = 1
  AND t1.tid <> 3
  AND dft = 'Y'

aidとの組み合わせtidが一意である場合は、次のバージョンを使用できます。

SELECT tid
 FROM table t1
WHERE t1.aid = 1
  AND (t1.tid = 3 OR dft = 'Y')
ORDER BY dft LIMIT 1
于 2012-07-11T13:45:01.480 に答える
0

これはMSSQLで機能しますが、MySQLサーバーにアクセスして試すことができません。

SELECT TOP 1 *
FROM table t1
WHERE t1.aid=1
ORDER BY CASE WHEN t1.tid=3 THEN 0 ELSE 1 END, CASE WHEN t1.dft='Y' THEN 0 ELSE 1 END
于 2012-07-11T13:48:30.000 に答える