mysql - 修改 select join 以使用一个查询而不是两个

标签 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 结果是美国(根据示例),其余的结果是任何内容,如果不存在“美国”的结果,则显示其他内容。

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

最佳答案

您可以使用 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;

关于mysql - 修改 select join 以使用一个查询而不是两个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19201667/

相关文章:

mysql - 将 varchar mm/dd/yy 转换为日期格式 yyyy-mm-dd

php - mysql查询根据另一列的值按不同列排序

mysql - 使用自连接按两列分组时 SQL 查询速度较慢

mysql - 如何将键映射到 MySQL 选择查询中单个字段的值

php - 内爆 2 个独立的阵列?

python - mysql数据库优先级顺序

java - 触发 Hibernate 和 Java App

c# - BackgroundWorker 崩溃程序

mysql - 重置 MySQL root 密码在运行 init-file 时出现错误

Mysql每组最大计数