2014-01-06 28 views
0

我有一個基本查詢從三個表中獲取值。三個表格:公司,classes_by_company和person。我在所有名稱爲company_id的表中都有一個外鍵。在where子句中,我使用LIKE與隨機值進行比較,以獲取可能匹配的任何結果的值。但是我沒有這麼做。我在sql行WHERE a.id LIKE %1% OR a.company_id LIKE %3% OR c.count LIKE %1% OR p.count LIKE %1%中遇到錯誤。我如何將這三個表中的所有值與一個隨機值進行比較,以查看是否存在匹配? SQLFIDDLE在查詢子句中使用LIKE %%和來自不同表的多個值

SELECT a.id, a.company_id, a.status, 
     c.count AS classes_per_company, 
     p.count AS employees_per_company 
FROM company a 
LEFT JOIN (SELECT company_id, COUNT(*) as count 
      FROM classes_by_company 
      GROUP BY company_id) c 
     ON a.company_id = c.company_id 
LEFT JOIN (SELECT company_id, COUNT(*) as count 
      FROM person 
      GROUP BY company_id) p 
     ON a.company_id = p.company_id 
WHERE a.id LIKE %1% OR a.company_id LIKE %3% OR c.count LIKE %1% OR p.count LIKE %1% 

表結構:

CREATE TABLE company 
    (
    id int auto_increment primary key, 
    company_id int, 
    status varchar(20) 
    ); 

CREATE TABLE classes_by_company 
(
id int auto_increment primary key, 
company_id int, 
class_name varchar(20) 
); 

CREATE TABLE person 
(
id int auto_increment primary key, 
employee_id int, 
company_id int, 
person_name varchar(20) 
); 
+1

嘗試:'%1%'等等 – PeterRing

回答

3

LIKE必須被隨後的字符串,所以它應該是:

WHERE a.id LIKE '%1%' 
    OR a.company_id LIKE '%3%' 
    OR c.count LIKE '%1%' 
    OR p.count LIKE '%1%' 
+0

哦,我傻了!我忽略了這個重要的細節,認爲它是一個「整數」。 – techAddict82

+0

你使用'LIKE'作爲ID字段似乎很奇怪。 '%1%'將匹配1,10,11,...,19,21,31,41,...,100,210等。 – Barmar

+0

這只是爲了舉例。如果有日期,它會好嗎? – techAddict82

0

id爲整數,柱; LIKE運算符依賴於文本數據類型,例如爲nvarchar。

您可以將ID轉換爲字符串,例如WHERE CAST(a.id AS VARCHAR(10))LIKE'%1%'...

請注意圍繞%1%的單引號。

+0

MySQL在必要時會自動轉換爲字符串,我不認爲需要轉換。 – Barmar

+0

好點!我不太瞭解MySQL,但您的斷言適用於SQL Server/T-SQL。因此,唯一的問題是根據你的答案將單引號添加到LIKE表達式中。 – MarkHone

相關問題