Ⅰ 如何保證sql里的兩列不能同時相等
我的資料庫中,
有兩個表, 一級分類表tb1, 有如下列: id, name; 二級分類表tb2,
有如下列: id, name, tb1id. 其中tb1id引用的tb1中的id列. 我該如何確保tb2中的數據里的name和tb1id不同時相等?
use tempdb
go
create table tb2(ID int primary key,Name nvarchar(50) not null,tb1id int)
go
create function Chk_Check(@tb1id int,@Name nvarchar(50))
returns bit
as
begin
if(select count(1) from tb2 where Name=@Name and tb1id=@tb1id)=1
return 1
return 0
end
go
alter table tb2 add constraint Chk_Check_Name check(dbo.Chk_Check(tb1ID,Name)=1)
go
--測試
insert tb2 select 1,'a',1
insert tb2 select 2,'a',1--出錯
insert tb2 select 3,'a',2
insert tb2 select 4,'a',2--出錯
select * from tb2
Ⅱ sql怎麼查詢出兩列欄位相同的數據(在忽略英文大小寫和空格的情況下)
欄位值去掉空格和轉換成大寫或小寫之後,再做比較就可以了。
不知道你是什麼資料庫,以ORACLE資料庫舉例:
SELECTDISTINCTIN1.*
FROMINVENTORYIN1
WHEREEXISTS(
SELECTIN2.*
FROMINVENTORYIN2
WHEREIN1.ID!=IN2.ID
ANDLOWER(REPLACE(IN1.NAME,''))=LOWER(REPLACE(IN2.NAME,''))
ANDLOWER(REPLACE(IN1.STD,''))=LOWER(REPLACE(IN2.STD,''))
)
Ⅲ SQL資料庫不能插入相同數據怎麼才能使能插入相同的兩列數據了如圖
1、先確認一下你表裡唯一約束的欄位。
2、如果只是主鍵,並且是自增列,不用去掉主鍵,只要在insert 時,不寫ID這個列就可以了。
3、例子,假設表的主鍵是ID,有倆欄位,NAME,AGE,且沒有其他唯一約束的列:
insert into tab1(name,age) values('raofeng4666275','21');
Ⅳ SQL中限定兩列必須相等
使用觸發器。
或者使用表級 check, 限定 第二列的值必須等於第一列。
Ⅳ sql怎麼查詢出兩列欄位相同的數據(同時忽略英文大小寫和空格的情況下)
SQL 關鍵字 UPPer(),lower() 函數,
UPPer 統一轉換成大寫,
lower 統一轉換成小寫
假如表 T 中存在t 欄位,數據為:』abCD『
select * from T where UPPER(t)=UPPER(abCD)
上面是轉換成大寫再比較,轉換小寫用法類似。
Ⅵ SQL SERVER怎麼同一個表的兩個列參照另一個表的同一列 這兩個列的數據可以相同
建2個外鍵:注意約束名不能一樣,
員工表 中的 工作人員編號 要是主鍵。
alter table 表名 add constraint 約束名1 foreign key (推薦人編號) references 員工表(工作人員編號)
alter table 表名 add constraint 約束名2 foreign key (組長編號) references 員工表(工作人員編號)
Ⅶ SQL語句,實現A、B兩表中的兩列比較,輸出數據相同行。
1.
select A.單位, A.所在地區, B.時間 from A inner join B on A.單位=B.單位
2.
select A.單位, B.單位, A.所在地區, B.時間 from A inner join B on B.單位 like '%'+A.單位+'%'
Ⅷ sql server 2005查詢一個表中兩列值相等的sql語句怎麼寫
select * from 表 where 列1=列2
或者select * from A A1 INNER JOIN A A2 ON A1.列1=A2.列2
Ⅸ SQL創建CHECK約束時怎麼讓讓兩列數據比較
現在要說的是在列這一層次過濾的基於表定義之前就規范好的 CHECK 約束。(MySQL 版本 >= 8.0.16)
mysql> create table f1 (r1 int constraint tb_f1_r1_chk1 check (mod(r1,3)=0));
Query OK, 0 rows affected (0.03 sec)
mysql> create table f2 (r1 int constraint tb_f2_r1_chk1 check (mod(r1,3)=0) not enforced);
Query OK, 0 rows affected (0.02 sec)
這里 CHECK 約束的相關限制如下:
1. constraint 名字在每個資料庫中唯一。
也就是說單個資料庫里不存在相同的兩個 constraint,如果不定義,系統自動生成一個唯一的約束名字。
2. check 約束針對語句 insert/update/replace/load data/load xml 生效;針對對應的 ignore 語句失效。
3. 並非每個函數都可以使用,比如函數結果不確定的:NOW(),CONNECTION_ID(),CURRENT_USER()。
4. 不適用於存儲過程和存儲函數。
5. 系統變數不適用。
6. 子查詢不適用。
7. 外鍵動作(比如 ON UPDATE, ON DELETE) 不適用。
8. enforced 默認啟用,如果單獨加上 not enforced ,check 約束失效。
Ⅹ sql2005 兩個表中不同列名的兩列數據是否相同
可以這樣
select * from A where not exists(select * from B where A.a = B.b) order by c;