mysql查询和'32091119700523***5'有过同一天登记住宿的人员,显示姓名和身份证号
时间: 2023-07-23 09:07:29 浏览: 36
假设你的数据表名为 `accommodation`,包含以下字段:
- `name`:人员姓名
- `id_card`:身份证号
- `check_in_date`:登记住宿日期(yyyy-mm-dd)
则可以使用以下 SQL 语句查询和 `'32091119700523***5'` 有过同一天登记住宿的人员,并显示姓名和身份证号:
```
SELECT name, id_card
FROM accommodation
WHERE check_in_date = (
SELECT check_in_date
FROM accommodation
WHERE id_card = '32091119700523***5'
)
AND id_card != '32091119700523***5';
```
上述 SQL 语句中,首先使用子查询获取到 `'32091119700523***5'` 所对应的登记住宿日期,然后在外层查询中查找和该日期相同且身份证号不同的人员,并仅返回其姓名和身份证号。
相关问题
mysql 查询COUNT(*)和COUNT(id)哪个效率高
一般来说,COUNT(*)的效率比COUNT(id)高。因为COUNT(*)会统计表中所有的行数,而COUNT(id)只会统计id列非NULL的行数。如果id列上有索引的话,COUNT(id)可能会比COUNT(*)稍微快一点,但是如果id列上没有索引或者索引失效了,那么COUNT(*)的效率反而会更高。因此,在大多数情况下,推荐使用COUNT(*)。
mysql实现根据身份证号和人员编号保留时间最小的一条数据,其他的删除
可以通过以下 SQL 语句实现:
```
DELETE FROM table_name
WHERE id NOT IN (
SELECT id FROM (
SELECT id FROM table_name
WHERE (身份证号, 人员编号, 保留时间) IN (
SELECT 身份证号, 人员编号, MIN(保留时间)
FROM table_name
GROUP BY 身份证号, 人员编号
)
) AS temp
)
```
其中,`table_name` 是要操作的表名,`身份证号`、`人员编号` 和 `保留时间` 分别是对应的列名。这个语句会保留每个身份证号和人员编号组合中保留时间最小的一条数据,并删除其他数据。请注意备份数据以避免误操作。