0

美好的一天。过去几周潜伏在这里,从别人的问题中学习。感谢所有的答案。现在我需要问一个。使用 sqlite3 和其他工具,我已经能够将两个非常大的 .txt 文件转换为 .csv,然后转换为数据库。每行 7000+/- 行。我已经成功地编写了这个过程的脚本。我能够搜索和比较我所知道的“商品”,但我需要能够搜索我不知道的符合条件的商品。在下面的简化示例中,我需要比较美国和欧盟市场。有一堆我还不关心的列(示例中为 2、4)。列的垂直顺序不像我的示例那样按字母顺序排列,大麦可能像在欧盟那样排在玉米之后。我可以问玉米,发现美国的价格低于欧盟的价格。但我今天可能不知道 Hemp。我想要的是一个搜索,它将显示 table1,col3 和 table2,col3 中的所有相似名称,并向我显示以下输出,忽略非常用名称。

US  Barley  3.50
EU  Barley  3.51
US  Corn    6.51
EU  Corn    8.52
US  Hemp    8.23
EU  Hemp    4.15

美国/欧盟的订单远没有商品及其价格重要。提前感谢您的时间和想法。铝

数据库:商品

Table1
US  Foo Barley  3.50    abc
US  Bar Corn    6.51    def
US  Rev Flax    2.75    ghi
US  Des Hemp    8.23    jkl
US  Pon L_Rice  11.14   mno

Table2
EU  Pon Acai    4.25    pqr
EU  Rev Corn    8.52    stu
EU  Foo Barley  3.51    vwx
EU  Des Hemp    4.15    zab
EU  Bar S_Rice  11.13   cde
4

2 回答 2

2

你可能应该只有一张桌子。您可以使用视图来模拟它

create view commodities as 
   select market, foo, commodity, price, bar from Table1
   union all
   select market, foo, commodity, price, bar from Table2

要获得您的具体结果,请尝试:

select market, commodity, price from commodities
where commodity in ('Barley', 'Corn', 'Hemp')
order by market, commodity

获得您评论中要求的结果。

select c1.market, c1.commodity, c1.price from commodities c1, commodities c2
where c1.commodity = c2.commodity and abs(c1.price - c2.price) > 0.5  
order by c1.market, c1.commodity

更改0.5您有兴趣查看的任何价格增量。

于 2012-10-20T14:49:26.187 回答
0

重大成功!谢谢你。正如您在下面看到的,我的脚本几乎可以完美地与小型数据库一起使用。我还没有尝试过大的。关于输出格式的另一个问题。我可以在最终输出中抑制重复的商品名称吗?再次感谢您的帮助 - 我希望有人阅读并获得价值。艾尔(是的,为了便于阅读,我对其进行了一些清理)

$ sqlite3 test.db
SQLite version 3.6.21
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .databases
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
0    main             /test.db                    
sqlite> .tables
EUGoods  USGoods
sqlite> .headers on

sqlite> select * from USGoods;
Market|RegNo|Commodity|Price|Junk
"US"|234|"Barley"|3.5|"abc"
"US"|126|"Corn"|6.51|"def"
"US"|89|"Flax"|2.75|"ghi"
"US"|432|"Hemp"|8.23|"jkl"
"US"|813|"L_Rice"|11.14|"mno"

sqlite> select * from EUGoods;
Market|RegNo|Commodity|Price|Junk
"EU"|945|"Acai"|4.25|"pqr"
"EU"|111|"Corn"|8.52|"stu"
"EU"|44|"Barley"|3.51|"vwx"
"EU"|99|"Hemp"|4.15|"zab"
"EU"|339|"S_Rice"|11.13|"cde"

sqlite> SELECT USGoods.Commodity, 
EUGoods.Commodity, 
USGoods.Market, 
USGoods.Price, 
EUGoods.Market,
EUGoods.Price 
FROM USGoods , EUGoods 
WHERE USGoods.Commodity = EUGoods.Commodity;

Commodity|Commodity|Market|Price|Market|Price
"Barley"|"Barley"|"US"|3.5|"EU"|3.51
"Corn"|"Corn"|"US"|6.51|"EU"|8.52
"Hemp"|"Hemp"|"US"|8.23|"EU"|4.15

sqlite> SELECT USGoods.Commodity, 
EUGoods.Commodity, 
USGoods.Market, 
USGoods.Price, 
EUGoods.Market,
EUGoods.Price 
FROM USGoods , EUGoods 
WHERE USGoods.Commodity = EUGoods.Commodity 
AND abs(USGoods.Price - EUGoods.Price) > 0.5 
ORDER BY USGoods.market, USGoods.commodity;

Commodity|Commodity|Market|Price|Market|Price
"Corn"|"Corn"|"US"|6.51|"EU"|8.52
"Hemp"|"Hemp"|"US"|8.23|"EU"|4.15

sqlite> 
于 2012-10-20T23:38:23.920 回答