MySQL:如何忽略该列是不明确的

时间:2017-02-09 09:54:03

标签: mysql sql node.js database sequelize.js

我有一个像这样的mysql查询:

SELECT * from T1 
INNER JOIN T2 ON T2.t1_id = T1.id 
INNER JOIN T3 ON T3.t1_id = T1.id 
where T3.my_column = my_column

我收到Column 'my_column' in where clause is ambiguous错误,因为所有3个表都有my_column列。

我现在不能做的是说where T3.my_column = T1.my_column,因为我现在使用的是ORM,因为我必须在关联定义中设置条件我不知道是否会有T1T2表。

my_columnT1T2的实际值相同,这意味着我的条件对T1.my_columnT2.my_column都适用。

MySQL有没有办法说不关心模棱两可的列,只需随机选择其中一个

我想做的是这样的事情:

SELECT * from T1 
INNER JOIN T2 ON T2.t1_id = T1.id 
INNER JOIN T3 ON T3.t1_id = T1.id 
where T3.my_column = IGNORE_AMBIGUITY(my_column)

实际问题

我在n:m中定义sequelize关系,ORMnode.js

我的所有表格都有idcompany_idid不是唯一的,只有id-company_id对是唯一的。

这是我定义关联的方式:

{
    through: {
        model: 'T1_to_T2',
        scope: {
            company_id: {$col: 'company_id'}, // Problematic part
        }
    },
    foreignKey: 'T2_id'
}

我的问题是,通过T1_to_T2关系表,对于company_id=X1,我会得到X2X3公司的关系,因为查询并不关心关于关系表中的company_id字段。

2 个答案:

答案 0 :(得分:0)

如果你不知道它是在T2还是T3,你就会遇到问题。你的预期行为是什么?如果你想加入其中一个,那么你怎么知道你在过滤什么?

我认为您需要首先重新考虑您的问题,然后在决定如何解决之前从查询中定义您想要的内容。您收到错误是因为MySQL无法确定您想要的内容。

如果你真的想要任意一个,那就做:

 WHERE t3.mycolumn = t1.column OR t3.mycolumn = t2.mycolumn limit 1

这不是随机的,而是任意的。

答案 1 :(得分:-1)

试试这个

SELECT * from T1 
INNER JOIN T2 ON T2.t1_id = T1.id 
INNER JOIN T3 ON T3.t1_id = T1.id 
where T3.my_column = (select my_column from T1)