0

我试图在 SQL 中链接两个表,但它没有做我想要的。我有一个 table1 有两个字段 id、Total 和其他 Table2 包含 20 个字段,我只想提取 5 个 ID、名称、地址、城市、省。我的查询如下:

SELECT Table1.id, Table2.name, Table2.address, Table2.city, Table2.province, Table1.Total
  FROM Table1 INNER JOIN Table2 ON
 WHERE Table2.id Table1.Total Table1.id => = "& CLng (number1.Text ) &
  "AND Table1.Total <=" & CLng (number2.Text) &
"ORDER BY ASC Table2.name"

目的是关联这两个表,但问题是生成的查询具有重复的结果。我认为原因是,例如,我有一些 id 相同但名称不同的数据,它试图将不同的数据放在不同的行中,尽管它们具有相同的 id。

我花了很多时间寻找解决方案,但找不到。

4

4 回答 4

1

您没有ON正确指定您的条款。尝试删除该词WHERE,以便您实际上将连接限制在相关行,而不是进行完全连接。

于 2013-02-22T19:12:49.333 回答
0

使用左外连接代替 INNNER JOIN

检查sql。可能是您期望的如下。

SELECT Table1.id, Table2.name, Table2.address, Table2.city, Table2.province, Table1.Total 
FROM    Table1 
LEFT OUTER JOIN Table2 
        ON Table2.id =Table1.id 

WHERE Table1.Total = '' AND Table1.Total <= ''
ORDER   BY  Table2.name ASC
于 2013-02-22T19:11:19.957 回答
0

您可以使用“DISTINCT”语句仅返回不同的(不同的)值。重复的行只返回一次。

您的 sql 查询语法错误。也许它会因为那样返回重复的行。但如果修复后仍然返回重复行,则 Table2 必须有多个具有相同 id 的行。在这种情况下,您可以使用 DISTINCT 语句。

正确的 SQL 查询是:

SELECT DISTINCT Table1.id, Table2.name, Table2.address, Table2.city, Table2.province, Table1.Total
FROM Table1 INNER JOIN Table2 ON  Table1.id = Table2.id 
     AND Table1.total BETWEEN minValue AND maxValue 
ORDER BY ASC Table2.name

(minValue 和 maxValue 是数字)

在 VB 语法中

" SELECT Table1.id, Table2.name, Table2.address, Table2.city, Table2.province, Table1.Total " _
" FROM Table1 INNER JOIN Table2 ON  Table1.id = Table2.id " & _
"      AND Table1.total BETWEEN " & CLng (number1.Text ) &  "AND " & CLng (number2.Text) & _ 
"ORDER BY ASC Table2.name "
于 2013-02-27T00:53:48.413 回答
0

尝试这个

SELECT Table1.id, Table2.name, Table2.address, Table2.city, Table2.province, Table1.Total
FROM Table1 INNER JOIN Table2 ON
Table2.id = Table1.id  WHERE Table1.Total >=  CLng(number1.Text) AND Table1.Total <= CLng(number2.Text)  
GROUP BY Table2.name 
ORDER BY ASC Table2.name"
于 2013-02-22T19:22:03.030 回答