0

私は2つのテーブルを持っています。OldLoginTableA列とNewLogin列があります。IDIsManager、およびCanChangeがあります。TableB

入力パラメータを使用してストアドプロシージャを作成していますloginTableB最終的にはwhereのすべての列を返す必要がありますlogin = IDが、最初にNewLoginTableAを使用する必要があるかどうかを確認する必要があります。

それで、誰かが「TableBID =(login OR NewLogin)のすべての列を表示する」というクエリを書くのを手伝ってもらえますか?

ありがとう!

編集:追加されたコード:

DECLARE @login varchar(30) = 'test'

SELECT ISNULL(NewLogin, @login) AS NewLogin, TableB .IsManager, TableB.CanChange
FROM TableA
LEFT JOIN TableB ON TableB.ID = ISNULL(NewLogin, @login)
WHERE OldLogin = @login

上記のコードは、@loginがTableAに存在する場合にのみ機能します。そのテーブルに存在しない場合、結果は得られません。

4

3 に答える 3

0

私がそれを正しく理解しているなら...

SELECT TableB.*
FROM TableB
LEFT JOIN TableA ON TableB.id IN (TableA.OldLogin, TableB.NewLogin)

于 2012-11-08T20:16:20.103 に答える
0

a が null の場合、IFNULL(a,b) を使用して b を返します。

編集:mysqlを想定しましたが、それが他の言語で機能するかどうかはわかりません。COALESCE を使用することもできます。これは、任意の数の引数を取り、null 以外の最初の引数を返します。

DECLARE @login varchar(30) = 'test'

SELECT IFNULL(TableA.NewLogin, @login) AS NewLogin, TableB.IsManager, TableB.CanChange
FROM TableA
LEFT JOIN TableB ON 
  TableB.ID = IFNULL(TableA.NewLogin, @login)
WHERE OldLogin = @login
于 2012-11-08T20:31:20.443 に答える