更新 我想出了导致我问题的很大一部分原因。当我查询数据库以查找数据类型时,它正确返回了CHAR(4)以获取t2.sale_code。
然而,GUI没有显示前导零。 t3.sale_code在填充表的文件中没有前导零。这就是造成我困惑的原因,我纠正了零问题。现在它加入时没有任何CAST或其他操作。
的 的 __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ____ _我有一个查询:
SELECT
t1.id, t2.sale_code, t3.sale_code, t3.title
FROM
t1
INNER JOIN t2 ON t1.id = t2.id
INNER JOIN t3 ON t3.id = t2.id
我无法控制一些不同的一对多关系会导致重复。我需要这样做:
WHERE
t2.sale_code = t3.sale_code
然而,这只是行不通。我不确定我做错了什么。我可以手动使它工作:
SELECT
t1.id, t2.sale_code, t3.sale_code, t3.title
FROM
t1
INNER JOIN t2 ON t1.id = t2.id
AND t2.dt > t1.dt_active
AND t2.dt < t1.dt_inactive
INNER JOIN t3 ON t3.id = t2.id
WHERE
t2.sale_code = 4
AND t3.sale_code = 4
例如,这将返回一对正确匹配的sale_code
对。但是,当我直接比较它们(`WHERE t2.sale_code = t3.sale_code)时,它不返回任何结果。我在这里做错了吗?
答案 0 :(得分:2)
如果它们都是字符/字符串类型,那么你应该像
那样引用它们sale_code = '4'
列中可能有一些数据不可见,但是通过自动转换int到varchar(4)会被截断。
您可以使用DATALENGTH()来确定列是否具有隐藏的字符,或者将值复制到体面的文本编辑器中并查看十六进制视图中的值。
使联接起作用的一种肮脏方式是使用修剪包装sale_code,但最好还是清理数据。
RTRIM(LTRIM(t2.sale_code)) = RTRIM(LTRIM(t3.sale_code))
答案 1 :(得分:0)
您可以添加到内部联接
SELECT
t1.id, t2.sale_code, t3.sale_code, t3.title
FROM
t1
INNER JOIN t2 ON t1.id = t2.id
INNER JOIN t3 ON t3.id = t2.id AND t2.sale_code = t3.sale_code