我有一个像这样的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,因为我必须在关联定义中设置条件我不知道是否会有T1
或T2
表。
my_column
和T1
中T2
的实际值相同,这意味着我的条件对T1.my_column
和T2.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
关系,ORM
为node.js
。
我的所有表格都有id
和company_id
,id
不是唯一的,只有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
,我会得到X2
或X3
公司的关系,因为查询并不关心关于关系表中的company_id
字段。
答案 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)