I'm trying to setup a many-to-many relationship on a legacy database (which 
hopefully explains the ugly and non-Sequel standard table and field names), 
which I *think* I've done ok, unfortunately it's triggering a TinyTDS / 
MSSQL error whenever I try to query the association.  Hoping you can point 
me to a quick fix that I'm just not seeing, as if feels like this should be 
pretty simple...

Everything is wrapped in a Module as I deal with some other databases in 
this project, but the models look like so, with the problem associations 
(Device.tags, and Tag.devices) bolded...

class Device < Sequel::Model(InvDB[:tbl_equipment])

 set_primary_key :id_equipment
 def_column_alias(:model_id, :model)
 def_column_alias(:status_id, :status)

 one_to_one :jssmobileinfo, :key=>:serial_number, :primary_key=>:
serial_number, :class=>'JAMF::MobileNormalized'
 one_to_many :history, :key=>:equipment_id, :primary_key=>:id_equipment, :
class=>'Inventory::Device_History'
 many_to_one :user, :key=>:owner, :primary_key=>:id_no, :class=>
'Inventory::User', :select=>[:firstname, :lastname, :nom_utilisateur, :
mot_de_passe, :type, :school, :grade]
 many_to_one :device_model, :key=>:model_id, :key_column => :model, :
primary_key=>:id_model, :class=>'Inventory::Device_Model', :select=>[:
id_model, :model_description, :apple_model_number, :type]
 many_to_one :device_status, :key=>:status_id, :primary_key=>:id_status, :
class=>'Inventory::Device_Status', :select=>[:status_description, :assigned]
 many_to_one :site, :key => :school, :primary_key=>:id_school, :class => 
'Inventory::Site', :select => [:school_short_name]

* many_to_many *




*:tags,  :join_table => InvDB[:tbl_equipment_tag],  :left_key => 
:equipment_id, :left_primary_key => :id_equipment, :right_key => :tag_id, 
:right_primary_key => :id, :class=>'Inventory::Tag'*end

class Tag < Sequel::Model(InvDB[:tbl_tag])
 set_primary_key :id
 
 *many_to_many *:devices, 
 :join_table=>InvDB[:tbl_equipment_tag], 
 :left_key=>:tag_id, :left_primary_key => :id, 
 :right_key=>:equipment_id, :right_primary_key => :id_equipment, 
 :class=>'Inventory::Device'
end

 


There is an associated table "tbl_equipment_tag" that contains an :id 
primary key (just for that record), an :equipment_id and a :tag_id.


When I find a device and then try to get the tags associated, I'm getting a 
TinyTDS / MSSQL error like below:


 
"/Library/Ruby/Gems/2.3.0/gems/sequel-5.13.0/lib/sequel/adapters/tinytds.rb:205:in
 
`fields': TinyTds::Error: Only one expression can be specified in the 
select list when the subquery is not introduced with EXISTS. 
(Sequel::DatabaseError)"


I get the same error if find a Tag and try to see the associated Devices.


The sql code that is being generated is below:


SELECT [TBL_EQUIPMENT].* FROM [TBL_EQUIPMENT] INNER JOIN (SELECT * FROM [
TBL_EQUIPMENT_TAG]) AS [T1] ON ([T1].[EQUIPMENT_ID] = [TBL_EQUIPMENT].[
ID_EQUIPMENT]) WHERE ((SELECT * FROM [TBL_EQUIPMENT_TAG]).[TAG_ID] = 5)


If I run that query against the DB directly (using Navicat FWIW), I get 
nearly the exact error: 

"[FreeTDS][SQL Server]Only one expression can be specified in the select 
list when the subquery is not introduced with EXISTS."


I suspect this is something funky about how MS SQL works, but wondering 
about a workaround?

Thanks,


Jeff

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sequel-talk+unsubscr...@googlegroups.com.
To post to this group, send email to sequel-talk@googlegroups.com.
Visit this group at https://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.

Reply via email to