0

更新: 我找出了导致我的问题的很大一部分。当我查询数据库以查找数据类型时,它为 t2.sale_code 正确返回了 CHAR(4)。

但是,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),它不会返回任何结果。我在这里做错了吗?

4

2 回答 2

2

如果它们都是字符/字符串类型,那么您应该像这样引用它们

sale_code = '4'

列中可能有一些不可见的数据,但会被 int 自动转换为 varchar(4) 截断。

您可以使用 DATALENGTH() 来确定该列是否具有隐藏字符,或者将值复制到合适的文本编辑器中并在十六进制视图中查看值。

让连接工作的一种肮脏方法是用修剪包装 sale_code,但最好还是清理数据。

RTRIM(LTRIM(t2.sale_code)) = RTRIM(LTRIM(t3.sale_code))
于 2013-09-17T17:23:38.923 回答
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
于 2013-09-17T17:18:08.127 回答