我的tbl_module可能包含空id,我想要做的是对它执行检查,但是有错误返回给我,我的查询无法正常工作
SET @IID = 1
SELECT t1.ID, t1.Module FROM tbl_user t1
我的问题从这里开始,我无法开始加入我之前的查询,我知道这是执行查询的非法方式,但有人可以纠正我或启发我吗?
IF EXISTS(SELECT t2.ID FROM tbl_Module t2 where @IID = t2.id)
BEGIN
INNER JOIN tbl_Module t2 where t1.id = t2.id
END
答案 0 :(得分:1)
试试这个(MS SQL) -
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = '
SELECT *
FROM dbo.tbl_user t1
' + CASE WHEN OBJECT_ID('dbo.tbl_Module') IS NOT NULL
THEN 'JOIN dbo.tbl_Module t2 ON t1.id = t2.id'
ELSE ''
END
PRINT @SQL
EXEC sys.sp_executesql @SQL
答案 1 :(得分:1)
正如唐所说,做一个LEFT JOIN更常见,如果不存在具有该id的模块,它将在列t1.Module中放置NULL:
SELECT t1.ID, t1.Module FROM tbl_user t1
LEFT JOIN tbl_Module t2 where t1.id = t2.id
但您的要求可能特别吗? 希望这有帮助!