0

我需要在 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 行,其中一行在 ProductName 中显示 C 和一个是D。)

我想做的是通过以下条件获得 1-1 关系:如果 ObjectName 是 ObjD,那么 ProductName 是 D,如果 ObjectName 是 ObjC,那么 ProductName 是 C。

如果有人能指出正确的方法来解决这个问题,我将不胜感激......

谢谢!!

4

2 回答 2

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

  • ID
  • 数据库名称
  • 对象名
  • 产品名称

ProductName, DbName并在两个表上定义一个 coumpundcolumn 索引。

于 2013-02-25T03:03:29.020 回答
2

太丑了 (并且可能会变慢)。您应该使用整数 id 进行连接。

对于您的表格,它将是:

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

我希望这行得通。

于 2013-02-25T03:03:53.970 回答