如何在同一实体上使用 AND?
How to use AND on the same entity?
我想获取在第 x 天和第 y 天下订单的工人的姓名。
select name
from worker,
orders
where worker.workerid = oders.workerid
and date = x and date = y;
所以我只想得到这两天都下订单的工人。
试试这个:
SELECT name from worker, orders
WHERE worker.workerid = oders.workerid
DATE date IN (x, y)
做一个GROUP BY
。使用 HAVING
确保两个日期都存在。
select name
from worker
join orders
on worker.workerid = orders.workerid
where date in (x, y)
group by name
having count(distinct date) >= 2
注意切换到现代、明确的 JOIN
语法!
使用两个 exists where 子句...
SELECT name
FROM worker AS w
WHERE EXISTS (SELECT 1
FROM orders AS o
WHERE w.workerid = o.workerid
AND date = x)
AND EXISTS (SELECT 1
FROM orders AS o
WHERE w.workerid = o.workerid
AND date = y)
最简单的方法是使用 2 个部分查询和 postgre Intersect
运算符:
select name
from worker,
orders
where worker.workerid = oders.workerid
and date = y
INTERSECT
select name
from worker,
orders
where worker.workerid = oders.workerid
and date = x;
这将只留下在 X
AND y
.
活跃的工人姓名
http://www.postgresqltutorial.com/postgresql-intersect/
Like the UNION and EXCEPT operators, the PostgreSQL INTERSECT operator
combines the result sets of two or more SELECT statements into a
single result set. The INTERSECT operator returns any rows that are
available in both result set or returned by both queries.
in (x,y)
将为您提供在 2 天内至少有一天工作的工人。
虽然这里会为您提供工作了 2 天不同天数的人。
group by name
having count(distinct date)=2
总的来说,你得到你想要的
select name
from worker,
orders
where worker.workerid = oders.workerid
and date in (x,y)
group by name
having count(distinct date)=2
我想获取在第 x 天和第 y 天下订单的工人的姓名。
select name
from worker,
orders
where worker.workerid = oders.workerid
and date = x and date = y;
所以我只想得到这两天都下订单的工人。
试试这个:
SELECT name from worker, orders
WHERE worker.workerid = oders.workerid
DATE date IN (x, y)
做一个GROUP BY
。使用 HAVING
确保两个日期都存在。
select name
from worker
join orders
on worker.workerid = orders.workerid
where date in (x, y)
group by name
having count(distinct date) >= 2
注意切换到现代、明确的 JOIN
语法!
使用两个 exists where 子句...
SELECT name
FROM worker AS w
WHERE EXISTS (SELECT 1
FROM orders AS o
WHERE w.workerid = o.workerid
AND date = x)
AND EXISTS (SELECT 1
FROM orders AS o
WHERE w.workerid = o.workerid
AND date = y)
最简单的方法是使用 2 个部分查询和 postgre Intersect
运算符:
select name
from worker,
orders
where worker.workerid = oders.workerid
and date = y
INTERSECT
select name
from worker,
orders
where worker.workerid = oders.workerid
and date = x;
这将只留下在 X
AND y
.
http://www.postgresqltutorial.com/postgresql-intersect/
Like the UNION and EXCEPT operators, the PostgreSQL INTERSECT operator combines the result sets of two or more SELECT statements into a single result set. The INTERSECT operator returns any rows that are available in both result set or returned by both queries.
in (x,y)
将为您提供在 2 天内至少有一天工作的工人。
虽然这里会为您提供工作了 2 天不同天数的人。
group by name
having count(distinct date)=2
总的来说,你得到你想要的
select name
from worker,
orders
where worker.workerid = oders.workerid
and date in (x,y)
group by name
having count(distinct date)=2