Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要SQL和Sequel方面的帮助,包括内部连接和where/filter_Sql_Ruby_Sequel - Fatal编程技术网

需要SQL和Sequel方面的帮助,包括内部连接和where/filter

需要SQL和Sequel方面的帮助,包括内部连接和where/filter,sql,ruby,sequel,Sql,Ruby,Sequel,需要帮助将sql传输到sequel: SQL: 我被困在续集中,我不知道如何过滤,到目前为止是这样的: cid= table_t.select(:curr_id). join(:table_c, :curr_id=>:curr_id). join(:table_b, :bic=>:bic). filter( ????? ) 用比上面更好的成语回答也很受欢

需要帮助将sql传输到sequel:
SQL:

我被困在续集中,我不知道如何过滤,到目前为止是这样的:

 cid= table_t.select(:curr_id).
                    join(:table_c, :curr_id=>:curr_id).
                    join(:table_b, :bic=>:bic).
                    filter( ????? )  
用比上面更好的成语回答也很受欢迎

更新:
我必须稍微修改一下才能使它工作

cid = DB[:table_t].select(:table_t__curr_id).
  join(:table_c, :curr_id=>:curr_id).
  join(:table_b, :bic=>:table_t__bic). #add table_t or else ERROR: column table_c.bic does not exist
  filter(:table_c__alpha_id => 'XXX',
         :table_b__name => 'Foo')
没有过滤器

cid = DB[:table_t].select(:table_t__curr_id).
                    join(:table_c, :curr_id=>:curr_id, :alpha_id=>'XXX').
                    join(:table_b, :bic=>:table_t__bic, :name=>'Foo')

顺便说一句,我使用的是pgsql 9.0,我想您可以随时使用

.filter('table_c.alpha_id = ? AND table_b.name = ?', 'XXX', 'Foo')

要记住的一点是,Sequel非常乐意让您使用原始SQL。如果您发现在SQL继续运行时更容易表达查询,请确保对其进行注释,以便以后可以找到它。然后你可以回到那条线,调整它,这样它就可以利用续集的惊人之处


但是,尽量避免任何特定于特定DBM的内容,因为这样会降低可移植性,这是使用ORM生成查询的主要原因之一

这是纯粹的续集方式:

cid = DB[:table_t].select(:table_t__curr_id).
  join(:table_c, :curr_id=>:curr_id).
  join(:table_b, :bic=>:bic).
  filter(:table_c__alpha_id => 'XXX',
         :table_b__name => 'Foo')
请注意,由于您使用的是内部联接,因此也可以在不使用WHERE的情况下执行此操作:

cid = DB[:table_t].select(:table_t__curr_id).
  join(:table_c, :curr_id=>:curr_id, :alpha_id=>'XXX').
  join(:table_b, :bic=>:bic, :name=>'Foo')

“SEQUEL”是一个古老的名字,现在我们称它为“SQL”:)我想他是指SQL,有些人把它称为“SEQUEL”,我不想提出新的问题,只是想知道如何使上面的最后一段代码成为SQL注入证明?
cid = DB[:table_t].select(:table_t__curr_id).
  join(:table_c, :curr_id=>:curr_id, :alpha_id=>'XXX').
  join(:table_b, :bic=>:bic, :name=>'Foo')