假设我有一个包含敏感信息的mysql数据库,并且希望对某些数据进行改组,例如将lastname列中的值交换为仅来自另一个用户的同列中的值。
注意:数据库将由开发人员使用,我不希望他们访问真实信息,因此使用select的那些建议无法解决,我看到Soft DataVeil做到了这一点,但在mysql中却没有
示例 User1从user4接收姓氏
原始数据
Fristname | Lastname
user1 | lastname1
user2 | lastname2
user3 | lastname 3
user4 | lastname4
user5 | lastname5
随机播放模式
Fristname | Lastname
user1 | lastname4
user2 | lastname5
user3 | lastname2
user4 | lastname1
user5 | lastname3
注意:我试图为此使用dataveil,但是显然它在mysql中不会洗牌
答案 0 :(得分:2)
如果您不介意“姓氏”列中的重复项,则为
您可以使用具有随机顺序和限制的简单子查询来做到这一点。
查询
SELECT
Table1.Fristname
, (SELECT Table11.Lastname FROM Table1 AS Table11 ORDER BY RAND() LIMIT 1) AS Lastname
FROM
Table1
可能的结果
| Fristname | Lastname |
| --------- | ---------- |
| user1 | lastname 3 |
| user2 | lastname 3 |
| user3 | lastname 3 |
| user4 | lastname5 |
| user5 | lastname4 |
答案 1 :(得分:1)
Fristname
和Lastname
(后一个随机排序)。Lastname
是随机排序的,因此Lastname
会得到不同的Fristname
。Lastname
列中没有重复 所有版本的MySQL :尝试类似以下操作( SQL Fiddle DEMO ):
SELECT t3.Fristname,
t4.Lastname
FROM (
SELECT @rn1 := @rn1 + 1 AS rn1,
t1.Fristname
FROM your_table AS t1
CROSS JOIN ( SELECT @rn1 := 0) AS rnt1
) AS t3
INNER JOIN (
SELECT @rn2 := @rn2 + 1 AS rn2,
t5.Lastname
FROM
(
SELECT t2.Lastname
FROM your_table AS t2
ORDER BY rand()
) AS t5
CROSS JOIN ( SELECT @rn2 := 0) AS rnt2
) AS t4 ON t4.rn2 = t3.rn1