我有两个表,表2每个变量有一行,而表1每个变量有多行.我想从表2中随机 Select 1000行(1000个变量),然后将这些行连接到表1.最终的表每个变量将有许多行.我还添加了从两个表格中进行 Select 的条件.这是我的代码,但它不是从表2中挑选1000个变量:

SELECT t1.var1, t1.var2, t2.var3, t2.var4
FROM table1 t1
RIGHT JOIN (SELECT var1, var3 FROM table2 ORDER BY RAND() LIMIT 1000) t2 
ON t1.var1 = t2.var2
WHERE t1.var2 < 90 AND t2.var4 = "asd";

我错过了什么? 此外,我已经测试过,限制了10个变量,有时我得到零行.

推荐答案

您的查询可以轻松过滤掉所有结果.

SELECT t1.var1, t1.var2, t2.var3, t2.var4
FROM table1 t1
RIGHT JOIN (SELECT var1, var3 FROM table2 ORDER BY RAND() LIMIT 1000) t2 
ON t1.var1 = t2.var2
WHERE t1.var2 < 90 AND t2.var4 = "asd";

这会 Select t2.var4 = 'asd'0个随机行,然后测试t2.var4 = 'asd'个行.我假设并非所有行都符合该条件.因此,随机 Select 的t2.var4 = 'asd'0行中可能有none行符合该条件.

此外,您还在外部连接之后测试t1.var2 < 90,这意味着仅包含至少一行t2行匹配该范围条件的t1行.这还造成了查询不返回结果的可能性,因为并非所有t1行都具有相应的t2行.

您应该能够解决这两个问题.

SELECT t1.var1, t1.var2, t2.var3, t2.var4
FROM table1 t1
RIGHT JOIN (
  SELECT var1, var3 FROM table2 
  WHERE var4 = 'asd' ORDER BY RAND() LIMIT 1000
) t2 
ON t1.var1 = t2.var2 AND t1.var2 < 90;

这将子查询内的条件设置为t2.var4,因此子查询返回从匹配行子集中随机 Select 的t2.var40行.

此外,将t1.var2上的条件放入连接条件中意味着即使没有与该条件相匹配的t1行,也将返回t2行.

Mysql相关问答推荐

MySQL binlog事件上的并发事务行为

SQL-从一个字段中 Select 值,但另一个字段中不包含零值

提高bash脚本从大型gml文件读取数据的效率

排序子查询结果并返回每个 ID 的第一行

如何编写一个查询,计算表中每个日期的一个日期加上前 4 天的记录数?

sequelize 中最好的更新方法是什么

SQL使用LIMIT获取结果和结果中的行数

最后一个字母 '%n' 的 mysql SELECT 字符串不起作用

一次更新mysql中的多个列

mysql数据库数据文件夹中的DESKTOP-7JFP5MF-bin.000001文件有什么用?

SQL / MySQL:如何在WHERE IN中判断类似于OR的AND逻辑

了解 Spring 和数据库级别的事务?

在 postgresql 中实现 UML 类:创建类型与创建表

为什么从我的 SQL 查询中删除 BINARY 函数调用会如此显着地改变查询计划?

将 Django DB 从 SQLite 迁移到 MySQL 的最佳方法是什么?

如何在特定数据库中创建表?

Drupal 的默认密码加密方法是什么?

如何从两个不同的日期获得年份差异?

MySQL在哪里存储数据库文件?

在 MySQL 中仅 Select 仅包含字母数字字符的行