2016-05-20 3 views
1
SELECT IF((
    SELECT COUNT(TABLE_NAME) 
    FROM information_schema.tables 
    WHERE TABLE_SCHEMA='database0' AND TABLE_NAME='table' 
) >0 , (
    SELECT id 
    FROM database1.table 
    WHERE id NOT IN (SELECT id FROM database0.table) 
), NULL) AS pk_value; 

テーブルdatabase0.tableが存在しない可能性があります。テーブルが存在しない場合は、IFステートメントのtrue節をスキップします。 IFステートメントがNULLを返しても、database0.tableが存在しないというエラーが表示されます。テーブルが存在しない場合にエラーをスローするのではなく、クエリがNULLを返すようにするにはどうすればよいですか?IFチェック付きテーブルが存在します。

+6

、これは '手段IF:次のように値にアクセスすると

DROP FUNCTION IF EXISTS get_pk; DELIMITER // CREATE FUNCTION get_pk() RETURNS INT BEGIN DECLARE counter INT; DECLARE pk_value INT; SELECT COUNT(table_name) INTO counter FROM information_schema.tables WHERE table_schema = 'database0' AND table_name = 'table'; IF counter = 1 THEN SELECT id INTO pk_value FROM database1.table WHERE id NOT IN (SELECT id FROM database0.table); ELSE SELECT NULL INTO pk_value; END IF; RETURN pk_value; END// DELIMITER ; 

:あなただけの実行時に評価される関数、としてそれを保存することができます'関数は手続き型言語の' IF'文のように振る舞いません。テーブルが存在しない場合、クエリはIF関数が何をしても正常にコンパイルされません。 –

答えて

0

コメントに記載されているように、クエリは実行前にエラーチェックされているため、存在しないテーブルを参照することはできません。クエリが全体としてコンパイルされ

SELECT get_pk(); 
関連する問題