Please help me with finding a SQL select statement for the following problems.
I have two classes: Site and Link
Table Link has two columns: linking_site_id, and linked_site_id
I would like to find all the links in table Link where linking_site_id = 3 or linked_site_id = 3 but only include a link where linked_site_id = 3 if the linking_site_id in that link is not one of the linked_site_id that site 3 links to. For example, if the Link table contains the following rows
Linking_site Linked_site
2 1
3 2
3 4
5 3
2 3
What SQL select statement would return only the following:
3 2
3 4
5 3
If SQL query alone cannot do this, what is the most efficient way to do it via RoR? Thanks.
plain SQL solution, although not really scalable, I guess... :
SELECT * FROM `links` as l
WHERE
l.linking_site = 3 or
(l.linked_site = 3
AND (select count(*) from links where linking_site=3 and
linked_site=l.linking_site)=0)
select *
from link_table le
where le.link_site = ‘3’ or le.linked_site =‘3’
and not exists (select 0
from link_table li
where li.link_site = le.linked_site
and le.link_site = li.linked_site)
select *
from link_table le
where le.link_site = ‘3’ or le.linked_site =‘3’
and not exists (select 0
from link_table li
where li.link_site = le.linked_site
and le.link_site = li.linked_site)