修改选择联接以使用一个查询而不是两个

时间:2013-10-05 19:11:35

标签: mysql sql database

请考虑以下问题:

SELECT item.*, address_book.Country
FROM item 
INNER JOIN address_book
ON item.addressbook_id=address_book.idaddress_book and address_book.Country="USA"  order by rand() limit 100;  ; 

我之后通常会做的是如果我没有结果来运行另一个查询而对国家没有任何限制(这样我就可以获得所有国家/地区)。

如果我得到结果但是它们不到100我然后重新运行所有国家的第二个查询但是有限制(100-myexistingnoofresults)

有没有办法只使用第一个查询并以某种方式对其进行修改,因此第一个x结果为USA(根据示例),其余为任何内容,如果没有“USA”结果,则显示其他内容。

如果可能的话,我想随机显示结果。

1 个答案:

答案 0 :(得分:2)

您可以稍微使用order by来实现此目的。我认为您也可以使用Rand()随机订购,但这不是我尝试过的。

Select
    item.*, 
    address_book.Country 
From
    item 
        Inner Join
    address_book 
        on item.addressbook_id = address_book.idaddress_book
Order By
    Case When address_book.Country = "USA" Then 0 Else 1 End,
    Rand()
limit 100;