本文目錄一覽:
- 1、mysql 中欄位不允許有重複值 怎麼設
- 2、MYSQL 欄位內容不要同時相同
- 3、mysql查詢數據 某個欄位不重複
- 4、mysql如何去除兩個欄位數據相同的記錄
- 5、求解: 資料庫限制兩欄位不允許任何重複值.MSSQL或MYSQL或其他都行
mysql 中欄位不允許有重複值 怎麼設
可以用UNIQUE索引
語法如下:
ALTER TABLE `TableName`
ADD UNIQUE INDEX IndexName(`FieldName`);
MYSQL 欄位內容不要同時相同
–創建兩個列的唯一索引:
CREATE UNIQUE INDEX TEST_INDEX
ON TEST(date,biao);
mysql查詢數據 某個欄位不重複
//查詢表中的數據 同時某個欄位不重複 並且排序
首先做一下查詢某個欄位不重複(使用group by);
select * from 表名 where group by 不重複的欄位名;
在做一下排序,我之前有發過一次排序,這次就做一個簡單排序
order by 欄位a=0 desc, 欄位a desc,欄位b desc (a欄位等於0在最前面,a欄位除了0之外的都為倒敘,b欄位倒敘);
這樣組合起來就好了
select * from 表名 where group by 不重複的欄位名 order by 欄位a=0 desc, 欄位a desc,欄位b desc;
mysql如何去除兩個欄位數據相同的記錄
MySQL查詢重複欄位,及刪除重複記錄的方法
資料庫中有個大表,需要查找其中的名字有重複的記錄id,以便比較。如果僅僅是查找資料庫中name不重複的欄位,很容易:
SELECT min(`id`),`name` FROM `table` GROUP BY `name`;
但是這樣並不能得到說有重複欄位的id值。(只得到了最小的一個id值)查詢哪些欄位是重複的也容易:
SELECT `name`,count(`name`) as count FROM `table` GROUP BY `name` HAVING count(`name`) 1 ORDER BY count DESC;
但是要一次查詢到重複欄位的id值,就必須使用子查詢了,於是使用下面的語句。
SELECT `id`,`name` FROM `table` WHERE `name` in (
SELECT `name`
FROM `table`
GROUP BY `name` HAVING count(`name`) 1);
但是這條語句在mysql中效率太差,感覺mysql並沒有為子查詢生成零時表。於是使用先建立零時表:
create table `tmptable` as (
SELECT `name`
FROM `table`
GROUP BY `name` HAVING count(`name`) 1);
然後使用多表連接查詢:
SELECT a.`id`, a.`name` FROM `table` a, `tmptable` t WHERE a.`name` = t.`name`;
結果這次結果很快就出來了。
========================
查詢及刪除重複記錄的方法
(一)
1、查找表中多餘的重複記錄,重複記錄是根據單個欄位(peopleId)來判斷
select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) 1)
2、刪除表中多餘的重複記錄,重複記錄是根據單個欄位(peopleId)來判斷,只留有rowid最小的記錄
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )1)
3、查找表中多餘的重複記錄(多個欄位)
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) 1)
4、刪除表中多餘的重複記錄(多個欄位),只留有rowid最小的記錄
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)1)
5、查找表中多餘的重複記錄(多個欄位),不包含rowid最小的記錄
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)1)
求解: 資料庫限制兩欄位不允許任何重複值.MSSQL或MYSQL或其他都行
你要求每插入一條記錄,三個欄位值都要和資料庫現有的所有記錄欄位值不同,如果已經存在,就不能插入,用代碼或者函數實現(例如:select count(*) from 表 where a not in(‘當前要插入 的a值’,’當前要插入 的b值’,’當前要插入 的c值’) and b not in(‘當前要插入 的a值’,’當前要插入 的b值’,’當前要插入 的c值’) and c not in ….),sql需要優化(考慮使用exist )
其實我再想是不是你理解錯需求了?這個實現不管怎樣,性能都不太好,實際項目中,一般不會這麼設計的
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/219591.html