在mysql中使用减号
我有一个表“trail”,它维护点a如何连接到点b的记录。如果有任何中间点,该表也会记录它们。trails“type”中有一列指示此连接是主连接还是备份连接(type只能有2个值“main”或“backup”,具有备份路径是可选的)和其他列Conn_ID(“主”和“备份”连接将具有相同的Conn_ID),可能通过也可能不通过一些公共点 我想列出通过一个点的所有连接(基本上是Conn_ID),比如X(中间点),如果X被取出会受到影响。这是可能的,如果是,如何进行?如果您需要更多信息,请告诉我。表中有近140列,其中仅使用上面的2列 我尝试使用减号,但没有成功。我应用的逻辑如下:在mysql中使用减号,mysql,sql,database,Mysql,Sql,Database,我有一个表“trail”,它维护点a如何连接到点b的记录。如果有任何中间点,该表也会记录它们。trails“type”中有一列指示此连接是主连接还是备份连接(type只能有2个值“main”或“backup”,具有备份路径是可选的)和其他列Conn_ID(“主”和“备份”连接将具有相同的Conn_ID),可能通过也可能不通过一些公共点 我想列出通过一个点的所有连接(基本上是Conn_ID),比如X(中间点),如果X被取出会受到影响。这是可能的,如果是,如何进行?如果您需要更多信息,请告诉我。表中
select Conn_id from trail where point = 'X'
MINUS
select Conn_id from trail where point in (select distinct(Conn_id) from trail where point = 'X') AND Type = 'Backup'
有效地给我所有通过X的路径(包括主路径和备份路径),或者没有任何备份路径。
谢谢MySQL不支持减号。只有一列,您可以轻松地将其替换为NOT IN,但是:
select Conn_id
from trail
where point = 'X'
and Conn_id not in
(
select Conn_id
from trail
where point in (select distinct(Conn_id) from trail where point = 'X')
and Type = 'Backup'
);
MINUS
是Oracle特有的。它的SQL标准是,除了
MySQL或Hi Thorsten的可能副本都不支持这两个标准,到目前为止,查询看起来不错,我已经开始得到一些积极的结果。好吧,我只是复制了你的查询并用NOT in部分替换了MINUS。我不知道,这个查询是否支持这正是您所需要的(我没有费心去想它是如何告诉真相的:-)我注意到现在您使用了distinct(Conn\u id)
。distinct通常不与括号一起使用;它始终在整行上工作。此外,在中处理一组值。2在(1,2,3)中,2在(1,2,2,3)中。您不必告诉dbms该集合必须是独立的。这可能意味着dbms不必要的工作。因此,请将distinct(Conn\u id)
替换为Conn\u id
。