我需要在列DBName上加入以下2个表:
表A
ProductName DbName ServerName
A DB1 sername
B DB2 sername
C DB3 sername
D DB3 sername
表B
ID DBName ObjectName
1 DB3 objC
2 DB2 objD
3 DB3 objD
4 DB1 objD
这样我就可以获得一个包含以下列的最终表格(即表B +产品名称的所有列):
ID DBName ObjectName ProductName
从表AI中可以看出,DB3与2个不同的ProductName(C和D)相关,导致多对多的关系(即如果col在连接后有DB3,则变为2行,一个显示C在ProductName中,一个是D。)
我想做的是按条件获得1-1关系,如果ObjectName是ObjD,那么ProductName是D,如果ObjectName是ObjC,那么ProductName是C.
如果有人能指出我正确的方式来解决这个问题,我将不胜感激......
谢谢!
答案 0 :(得分:2)
SELECT a.*, b.ProductName
FROM tableB a
INNER JOIN tableA b
ON a.DBName = b.DbName AND
a.ObjectName LIKE '%' + b.ProductName
上面的查询按预期工作,但肯定会有慢的性能。它将执行FULL TABLE SCAN
因为它不使用和索引。
请对表进行规范化,以便搜索使用索引。
以下是建议架构:
表A
表B
并在两个表上的ProductName, DbName
上定义coumpundcolumn索引。
答案 1 :(得分:2)
对于你的表格,它将是:
SELECT b.ID, b.DBName, b.ObjectName, a.ProductName
FROM a
JOIN b
ON a.DBName = b.DBName
AND CONCAT('%',a.ProductName) LIKE b.ObjectName
我希望这有效。