sql - 无法在 Postgres 中加入两个有限制的表
问题描述
我有表 A 和 col1、col2、col3 和表 B col1。
我想使用限制加入两个表
我想要一些像
select a.col1,a.col2,a.col3,b.col1
from tableA a, tableB b limit 5 and a.col1 between 1 AND 10;
所以我在表 b 中有 10 条记录,在表 a 中有 10 条记录。通过仅限制表 b 中的 5 条记录,我应该总共获得 50 条记录
解决方案
您的描述转换为CROSS JOIN
:
SELECT a.col1, a.col2, a.col3, b.b_col1 -- unique column names
FROM tablea a
CROSS JOIN ( SELECT col1 AS b_col1 FROM tableb LIMIT 5 ) b;
-- WHERE a.col1 BETWEEN 1 AND 10; -- see below
...就像 a_horse 已经证明LIMIT
的那样。不返回任意行。结果可以从一次执行更改为下一次执行。tableb
LIMIT
ORDER BY
要从中选择随机行tableb
:
...
CROSS JOIN ( SELECT col1 AS b_col1 FROM tableb ORDER BY random() LIMIT 5) b;
如果您的桌子很大,请考虑:
当你 ...
在...表 a 中有 10 条记录
...添加的WHERE
条件要么是多余的,要么是错误的,以获得 50 行。
虽然 SQL 允许这样做,但拥有多个同名的结果列几乎没有意义。一些客户端立即抛出错误。使用列别名使名称唯一。
推荐阅读
- c# - 如何将 .net core EF 注入 WPF 应用程序
- go - http.SetCookie 的内存地址无效
- web-scraping - 用 Jasmine 测试 puppeteer?
- sql - 日期绑定 SQL 分组依据
- node.js - 数组的节点肥皂问题
- sql - 哪个Oracle查询更快
- java - 使用 AES-128-ECB(无填充)解码 base64 文本,哈希 md5 作为密钥
- g++ - 即使在 -lstdc++ 标志之后,std::experimental::filesystem::v1::status 链接错误
- android - 如何在页面加载时等待然后在 Android WebViewClient 中执行 Javascript 代码
- firebase - 从 Firebase Functions 连接到 Google Cloud SQL 时出现“读取通信数据包时出错”