cmd.CommandText = @"SELECT * FROM tableA, tableB WHERE tableA.someid = tableB.someid AND UPPER(name) LIKE @name LIMIT 1"; cmd.Parameters.AddWithValue("@name", _name.ToUpper() + "%");
是否可以从tableA中选择名称匹配,即使tableA.someid = tableB.someid条件失败?目前,如果tableB没有匹配的someid但是匹配名称,则此查询不返回任何数据。
if tableA.someid = tableB.someid && UPPER(name) LIKE @name
return all data from both tables
if tableA.someid != tableB.someid
return all from tableA where UPPER(name) LIKE @name
答案 0 :(得分:2)
如果您想加入两个表并获取不匹配的记录,则需要outer join:
SELECT *
FROM tableA
LEFT JOIN tableB ON tableA.someid = tableB.someid
WHERE UPPER(name) LIKE @name
LIMIT 1
答案 1 :(得分:0)
您可以使用EXISTS
检查条目,UNION SELECT
加入两个结果:
SELECT * FROM tableA, tableB WHERE tableA.someid = tableB.someid UNION SELECT * FROM tableA WHERE NOT EXISTS (SELECT * FROM tableA, tableB WHERE tableA.someid = tableB.someid)
通过这种方式,您可以获得两个表中id匹配的值以及表A中表B中没有ma id的值的条目。
问题在于,两个联合选择必须具有相同数量的结果列。您可以通过手动指定列并填写null
:
SELECT colA1, colA2, colB1, colB2 FROM tableA, tableB WHERE tableA.someid = tableB.someid UNION SELECT colA1, colA2, null, null FROM tableA WHERE NOT EXISTS (SELECT * FROM tableA, tableB WHERE tableA.someid = tableB.someid)