如何在sql查询中停止冗余?

时间:2012-03-26 13:47:35

标签: mysql distinct

我在搜索查询时遇到问题。我的结果集列是重复列。我的问题是

SELECT DISTINCT a.*, b.first_name,c.category_name 
FROM 
  songs_upload a 
  inner join Artist b 
    on a.title like '%ab%' 
       and b.first_name like '%chandan%' 
  inner join Categories c
    on c.category_name like '%POP%'

1 个答案:

答案 0 :(得分:2)

那是因为你正在做select a.* ...,其他表(bc)肯定有同名的列。明确指定要从每个表中选择的列,并避免使用select *,因为这是一种可怕的做法,无论如何。

为什么这是不好的做法?想象一下未来的某个时间表a将来会添加一个存储大量数据的BLOB列。即使您不需要,您的查询也会最终恢复该列,并且您的查询性能将大幅降低。

您的查询应该是:

select a.colum_I_want, 
       a.other_column_I_want, 
       b.first_name,
       c.category_name 
FROM 
  songs_upload a 
  inner join Artist b 
    on a.title like '%ab%' 
       and b.first_name like '%chandan%' 
  inner join Categories c
    on c.category_name like '%POP%'