2014-08-29 33 views
-2
select Distinct 
p.ProductID, 
p.SingleAppPrice, 
p.ImageURL, 
p.IconURL, 
p.ProductName, 
p.ActPrice, 
c.CategoryIcon, 
c.CategoryName, 
s.SubCategoryName, 
p.Rating, 
p.AuthorID 
from 
ProductMast p,CategoryMast c,SubCategoryMast s 
where 
c.CategoryID=p.CategoryID 
and s.SubCategoryID=p.SubCategoryID 
and p.Keywords like '%application%' 
or p.ProductName like '%application%' 
or c.CategoryName like '%application%' 
or s.SubCategoryName like '%application%' 

得到明顯的記錄當我火這個查詢我得到121記錄,因爲多重使用像,如何防止這種重複。總戰績是11獲取與多個像

+1

沒有任何類型的樣本數據的這個問題是沒有意義的。我們無法猜測你有什麼或你需要什麼。 – 2014-08-29 09:11:18

+0

_「當我發火時,這個查詢得到了121條記錄,因爲多次使用like,如何防止這種重複。總記錄是11」_' WHERE'過濾記錄,所以它不會導致更多的記錄。但是'從ProductMast p,CategoryMast c,SubCategoryMast'創建一個carthesian產品。使用'加入'。 – 2014-08-29 09:12:51

+0

@lc我試圖用不同的列搜索應用程序,但是當應用程序包含多個列時,重複是開始的 – 2014-08-29 09:13:00

回答

1

你的AND和OR子句有優先順序問題。

也可以有一些錯誤的表連接,但我不能回答這個

這裏

c.CategoryID=p.CategoryID 
and s.SubCategoryID=p.SubCategoryID 

反正。

最小的修正將是

select Distinct 
p.ProductID, 
p.SingleAppPrice, 
p.ImageURL, 
p.IconURL, 
p.ProductName, 
p.ActPrice, 
c.CategoryIcon, 
c.CategoryName, 
s.SubCategoryName, 
p.Rating, 
p.AuthorID 
from 
ProductMast p,CategoryMast c,SubCategoryMast s 
where 
c.CategoryID=p.CategoryID 
and s.SubCategoryID=p.SubCategoryID 
and (p.Keywords like '%application%' 
     or p.ProductName like '%application%' 
     or c.CategoryName like '%application%' 
     or s.SubCategoryName like '%application%') 

現在,當然,良好的語法與加盟條款將

select Distinct 
    p.ProductID, 
    p.SingleAppPrice, 
    p.ImageURL, 
    p.IconURL, 
    p.ProductName, 
    p.ActPrice, 
    c.CategoryIcon, 
    c.CategoryName, 
    s.SubCategoryName, 
    p.Rating, 
    p.AuthorID 
from 
ProductMast p, 
join CategoryMast c on c.CategoryID = p.CategoryId 
join SubCategoryMast s on s.SubCategoryID = p.SubCategoryID 
where 
(p.Keywords like '%application%' 
or p.ProductName like '%application%' 
or c.CategoryName like '%application%' 
or s.SubCategoryName like '%application%') 
+0

感謝它的工作正常 – 2014-08-29 10:08:30

+0

@HughJones你的意思是串聯?它在Sql Server中是'+','||'是用於Oracle的,然後... – 2014-08-29 10:19:15

+0

@HughJones順便說一句,如果任何搜索字段是空的,那麼你可能會有副作用...並且爲null(應該使用一些Coalesce運營商避免這種情況)。 – 2014-08-29 10:20:05

0

嘗試下面的代碼

​​
+0

我認爲這對OP和更多訪問者來說會更加勉強,當你添加一些解釋你的意圖。 – reporter 2014-08-29 09:29:23

+0

@記者 - 謝謝你的建議..我下次會小心點 – 2014-08-29 09:40:14

1

from子句使三個表之間的笛卡爾乘積。因此所有表格的所有記錄都相互結合。這是造成更多的記錄比總數。

而不是join這些列在外鍵上的父表的主鍵。

SELECT DISTINCT p.productid, 
       p.singleappprice, 
       p.imageurl, 
       p.iconurl, 
       p.productname, 
       p.actprice, 
       c.categoryicon, 
       c.categoryname, 
       s.subcategoryname, 
       p.rating, 
       p.authorid 
FROM Productmast p 
     INNER JOIN Categorymast c 
       ON p.categoryid = c.categoryid 
     LEFT OUTER JOIN Subcategorymast s 
        ON p.subcategoryid = s.subcategoryid 
WHERE p.productname LIKE '%application%' 
     OR c.categoryname LIKE '%application%' 
     OR s.subcategoryname LIKE '%application%' 

我不確定您是否需要Distict。我想這是多餘的。

+0

我承認語法不好。但是真正的問題(即使我也會用join語法),就是缺少的括號。因爲'c.CategoryID = p.CategoryID 和s.SubCategoryID = p.SubCategoryID'與連接做「相同」(以不好的方式)。但由於OR子句不在括號之間,這就違背了邏輯。 – 2014-08-29 09:20:06

+0

@Tim Schmelter它的工作很好 – 2014-08-29 09:25:31

+0

當我嘗試零食再次搜索記錄是重複的。顯示6條記錄 – 2014-08-29 10:01:48