小编Mat*_*mov的帖子

无法绑定多部分标识符 - SubQuery

架构:

create table TableA (A1 int)
create table TableB (B1 int, B2 int)
create table TableC (C1 int)
Run Code Online (Sandbox Code Playgroud)

有问题的查询:

SELECT * 
FROM TableA a
INNER JOIN TableB b ON b.B1=a.A1
INNER JOIN (SELECT TOP 1 * 
            FROM TableC c
            WHERE c.C1=b.B1 ORDER BY c.C1) d ON d.C2=b.B2
INNER JOIN OtherTable ON OtherTable.Foo=d.C1
Run Code Online (Sandbox Code Playgroud)

构建此模式并在SQL Server 2008下的SQLFiddle中运行查询会导致:

The multi-part identifier "b.B1" could not be bound.: SELECT * FROM TableA a INNER JOIN TableB b ON b.B1=a.A1 INNER JOIN (SELECT TOP 1 * …
Run Code Online (Sandbox Code Playgroud)

sql join inner-join subquery sql-server-2008

15
推荐指数
2
解决办法
3万
查看次数

'is instanceof'界面糟糕的设计

说我有A级

class A
{
   Z source;
}
Run Code Online (Sandbox Code Playgroud)

现在,上下文告诉我'Z'可以是不同类的实例(比如B和C),它们不在它们的继承树中共享任何公共类.

我想天真的方法是使"Z"的接口类,使B级和C实现它.

但是有些事情仍然没有说服我,因为每次使用A类实例时,我都需要知道'source'的类型.因此,所有完成的多个'ifs'制作'是instanceof'听起来不太好.也许在将来其他一些类实现Z,并且拥有这种类型的硬编码'ifs'肯定会破坏某些东西.

问题的存在是我无法通过向Z添加函数来解决问题,因为在每个实例类型的Z中完成的工作是不同的.

我希望有人可以给我和建议,也许是关于一些有用的设计模式.

谢谢

编辑:根据界面Z背后的类,当某个A的实例完全不同时,"某人"在某个地方所做的工作.这就是问题,执行"重要工作"的实体不是Z,是别人那个想知道谁是Z.

Edit2:也许一个具体的例子会有所帮助:

class Picture
{
  Artist a;
}

interface Artist
{
}

class Human : Artist { }

class Robot : Artist {}
Run Code Online (Sandbox Code Playgroud)

现在某处我有一个实例Picture,

Picture p = getPicture();
// Now is the moment that depending if the type of `p.a` different jobs are done
// it doesn't matter any data or logic inside Human or Robot
Run Code Online (Sandbox Code Playgroud)

oop design-patterns

0
推荐指数
1
解决办法
348
查看次数